Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>D (programming language)</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/D_(programming_language)"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-D_programming_language rootpage-D_programming_language skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">D (programming language)</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<style data-mw-deduplicate="TemplateStyles:r1236090951">
/* start https://en.wikipedia.org/ */


.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}@media print{body.ns-0 .mw-parser-output .hatnote{display:none!important}}


/* end https://en.wikipedia.org/ */
</style><div role="note" class="hatnote navigation-not-searchable">For other programming languages named D, see <a href="D_(disambiguation)#Computing" class="mw-disambig" title="D (disambiguation)">D (disambiguation) §&nbsp;Computing</a>. For other uses, see <a href="D_(disambiguation)" class="mw-disambig" title="D (disambiguation)">D (disambiguation)</a>.</div>
<style data-mw-deduplicate="TemplateStyles:r1305433154">
/* start https://en.wikipedia.org/ */


.mw-parser-output .ambox{border:1px solid #a2a9b1;border-left:10px solid #36c;background-color:#fbfbfb;box-sizing:border-box}.mw-parser-output .ambox+link+.ambox,.mw-parser-output .ambox+link+style+.ambox,.mw-parser-output .ambox+link+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+style+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+link+.ambox{margin-top:-1px}html body.mediawiki .mw-parser-output .ambox.mbox-small-left{margin:4px 1em 4px 0;overflow:hidden;width:238px;border-collapse:collapse;font-size:88%;line-height:1.25em}.mw-parser-output .ambox-speedy{border-left:10px solid #b32424;background-color:#fee7e6}.mw-parser-output .ambox-delete{border-left:10px solid #b32424}.mw-parser-output .ambox-content{border-left:10px solid #f28500}.mw-parser-output .ambox-style{border-left:10px solid #fc3}.mw-parser-output .ambox-move{border-left:10px solid #9932cc}.mw-parser-output .ambox-protection{border-left:10px solid #a2a9b1}.mw-parser-output .ambox .mbox-text{border:none;padding:0.25em 0.5em;width:100%}.mw-parser-output .ambox .mbox-image{border:none;padding:2px 0 2px 0.5em;text-align:center}.mw-parser-output .ambox .mbox-imageright{border:none;padding:2px 0.5em 2px 0;text-align:center}.mw-parser-output .ambox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ambox .mbox-image-div{width:52px}@media(min-width:720px){.mw-parser-output .ambox{margin:0 10%}}@media print{body.ns-0 .mw-parser-output .ambox{display:none!important}}


/* end https://en.wikipedia.org/ */
</style>
<p class="mw-empty-elt">
</p>
<style data-mw-deduplicate="TemplateStyles:r1129693374">
/* start https://en.wikipedia.org/ */


.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" · ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}


/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r1295905060">
/* start https://en.wikipedia.org/ */


.mw-parser-output .infobox-subbox{padding:0;border:none;margin:-3px;width:auto;min-width:100%;font-size:100%;clear:none;float:none;background-color:transparent}.mw-parser-output .infobox-3cols-child{margin:auto}.mw-parser-output .infobox .navbar{font-size:100%}@media screen{html.skin-theme-clientpref-night .mw-parser-output .infobox-full-data:not(.notheme)>div:not(.notheme)[style]{background:#1f1f23!important;color:#f8f9fa}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .infobox-full-data:not(.notheme)>div:not(.notheme)[style]{background:#1f1f23!important;color:#f8f9fa}}@media(min-width:640px){body.skin--responsive .mw-parser-output .infobox-table{display:table!important}body.skin--responsive .mw-parser-output .infobox-table>caption{display:table-caption!important}body.skin--responsive .mw-parser-output .infobox-table>tbody{display:table-row-group}body.skin--responsive .mw-parser-output .infobox-table th,body.skin--responsive .mw-parser-output .infobox-table td{padding-left:inherit;padding-right:inherit}}


/* end https://en.wikipedia.org/ */
</style><table class="infobox vevent"><tbody><tr><th colspan="2" class="infobox-above" style="background-color:#e0e0e0;">D</th></tr><tr><td colspan="2" class="infobox-image"><span typeof="mw:File"></span></td></tr><tr><th scope="row" class="infobox-label"><a href="Programming_paradigm" title="Programming paradigm">Paradigm</a></th><td class="infobox-data"><a href="Multi-paradigm_programming_language" class="mw-redirect" title="Multi-paradigm programming language">Multi-paradigm</a>: <a href="Functional_programming" title="Functional programming">functional</a>, <a href="Imperative_programming" title="Imperative programming">imperative</a>, <a href="Object-oriented_programming" title="Object-oriented programming">object-oriented</a></td></tr><tr><th scope="row" class="infobox-label"><a href="Software_design" title="Software design">Designed&nbsp;by</a></th><td class="infobox-data"><a href="Walter_Bright" title="Walter Bright">Walter Bright</a>, <a href="Andrei_Alexandrescu" title="Andrei Alexandrescu">Andrei Alexandrescu</a> (since 2007)</td></tr><tr><th scope="row" class="infobox-label"><a href="Software_developer" class="mw-redirect" title="Software developer">Developer</a></th><td class="infobox-data organiser"><a href="D_Language_Foundation" title="D Language Foundation">D Language Foundation</a></td></tr><tr><th scope="row" class="infobox-label">First&nbsp;appeared</th><td class="infobox-data">8&nbsp;December 2001<span style="display:none">&nbsp;(<span class="bday dtstart published updated">2001-12-08</span>)</span><sup id="cite_ref-D1_changelog1_1-0" class="reference"><a href="#cite_note-D1_changelog1-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup></td></tr><tr><td colspan="2" class="infobox-full-data"></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="Software_release_life_cycle" title="Software release life cycle">Stable release</a></th><td class="infobox-data"><div style="margin:0px;">2.111.0<sup id="cite_ref-wikidata-829582f5a19372246e351f3304a7bec7c68e1165-v20_2-0" class="reference"><a href="#cite_note-wikidata-829582f5a19372246e351f3304a7bec7c68e1165-v20-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>&nbsp;
/ 1 April 2025<span style="display:none">&nbsp;(<span class="bday dtstart published updated">1 April 2025</span>)</span></div></td></tr><tr style="display:none"><td colspan="2">
</td></tr><tr><th scope="row" class="infobox-label"><a href="Type_system" title="Type system">Typing discipline</a></th><td class="infobox-data"><a href="Inferred_typing" class="mw-redirect" title="Inferred typing">Inferred</a>, <a href="Static_typing" class="mw-redirect" title="Static typing">static</a>, <a href="Strong_typing" class="mw-redirect" title="Strong typing">strong</a></td></tr><tr><th scope="row" class="infobox-label"><a href="Operating_system" title="Operating system">OS</a></th><td class="infobox-data"><a href="FreeBSD" title="FreeBSD">FreeBSD</a>, <a href="Linux" title="Linux">Linux</a>, <a href="MacOS" title="MacOS">macOS</a>, <a href="Microsoft_Windows" title="Microsoft Windows">Windows</a></td></tr><tr><th scope="row" class="infobox-label"><a href="Software_license" title="Software license">License</a></th><td class="infobox-data"><a href="Boost_Software_License" class="mw-redirect" title="Boost Software License">Boost</a><sup id="cite_ref-D-frontend-license_3-0" class="reference"><a href="#cite_note-D-frontend-license-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-boost-backend_4-0" class="reference"><a href="#cite_note-boost-backend-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup></td></tr><tr><th scope="row" class="infobox-label"><a href="Filename_extension" title="Filename extension">Filename extensions</a></th><td class="infobox-data">.d, .di, .dd<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup></td></tr><tr><th scope="row" class="infobox-label">Website</th><td class="infobox-data"><span class="url"><a rel="nofollow" class="external text" href="http://dlang.org">dlang<wbr>.org</a></span></td></tr><tr><th colspan="2" class="infobox-header" style="background-color: #EEEEEE;">Major <a href="Programming_language_implementation" title="Programming language implementation">implementations</a></th></tr><tr><td colspan="2" class="infobox-full-data"><a rel="nofollow" class="external text" href="https://github.com/dlang/dmd">DMD</a> (<a href="Reference_implementation" title="Reference implementation">reference implementation</a>), <a rel="nofollow" class="external text" href="https://gcc.gnu.org/">GCC</a>,
<p><a rel="nofollow" class="external text" href="https://gdcproject.org/">GDC</a>,
</p>
<a rel="nofollow" class="external text" href="https://github.com/ldc-developers/ldc">LDC</a>, <a rel="nofollow" class="external text" href="https://github.com/SDC-Developers/SDC">SDC</a></td></tr><tr><th colspan="2" class="infobox-header" style="background-color: #EEEEEE;">Influenced by</th></tr><tr><td colspan="2" class="infobox-full-data"><a href="BASIC" title="BASIC">BASIC</a>,<sup id="cite_ref-8" class="reference"><a href="#cite_note-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup> <a href="C_(programming_language)" title="C (programming language)">C</a>, <a href="C%2B%2B" title="C++">C++</a>, <a href="C_Sharp_(programming_language)" title="C Sharp (programming language)">C#</a>, <a href="Eiffel_(programming_language)" title="Eiffel (programming language)">Eiffel</a>,<sup id="cite_ref-9" class="reference"><a href="#cite_note-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup> <a href="Java_(programming_language)" title="Java (programming language)">Java</a>, <a href="Python_(programming_language)" title="Python (programming language)">Python</a>, <a href="Ruby_(programming_language)" title="Ruby (programming language)">Ruby</a></td></tr><tr><th colspan="2" class="infobox-header" style="background-color: #EEEEEE;">Influenced</th></tr><tr><td colspan="2" class="infobox-full-data">Genie, MiniD (since renamed Croc), <a href="Qore_(programming_language)" title="Qore (programming language)">Qore</a>, <a href="Swift_(programming_language)" title="Swift (programming language)">Swift</a>,<sup id="cite_ref-Swift_-_Getting_the_location_of_a_caller_10-0" class="reference"><a href="#cite_note-Swift_-_Getting_the_location_of_a_caller-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup> <a href="Vala_(programming_language)" title="Vala (programming language)">Vala</a>, <a href="C%2B%2B11" title="C++11">C++11</a>, <a href="C%2B%2B14" title="C++14">C++14</a>, <a href="C%2B%2B17" title="C++17">C++17</a>, <a href="C%2B%2B20" title="C++20">C++20</a>, <a href="Go_(programming_language)" title="Go (programming language)">Go</a>, <a href="C_Sharp_(programming_language)" title="C Sharp (programming language)">C#</a>, others</td></tr><tr><td colspan="2" class="infobox-below hlist" style="border-top: 1px solid #aaa; padding-top: 3px;">
<ul><li><span class="noviewer" typeof="mw:File"></span> <a href="https://en.wikibooks.org/wiki/D_Programming" class="extiw external" title="wikibooks:D Programming">D Programming</a> at Wikibooks</li></ul>
</td></tr></tbody></table>
<p><b>D</b>, also known as <b>dlang</b>, is a <a href="Multi-paradigm_programming_language" class="mw-redirect" title="Multi-paradigm programming language">multi-paradigm</a> <a href="System_programming_language" title="System programming language">system</a> <a href="Programming_language" title="Programming language">programming language</a> created by <a href="Walter_Bright" title="Walter Bright">Walter Bright</a> at <a href="Digital_Mars" title="Digital Mars">Digital Mars</a> and released in 2001. <a href="Andrei_Alexandrescu" title="Andrei Alexandrescu">Andrei Alexandrescu</a> joined the design and development effort in 2007. Though it originated as a re-engineering of <a href="C%2B%2B" title="C++">C++</a>, D is now a very different language. As it has developed, it has drawn inspiration from other <a href="High-level_programming_language" title="High-level programming language">high-level programming languages</a>. Notably, it has been influenced by <a href="Java_(programming_language)" title="Java (programming language)">Java</a>, <a href="Python_(programming_language)" title="Python (programming language)">Python</a>, <a href="Ruby_(programming_language)" title="Ruby (programming language)">Ruby</a>, <a href="C_Sharp_(programming_language)" title="C Sharp (programming language)">C#</a>, and <a href="Eiffel_(programming_language)" title="Eiffel (programming language)">Eiffel</a>.
</p><p>The D language reference describes it as follows:
</p>
<style data-mw-deduplicate="TemplateStyles:r1244412712">
/* start https://en.wikipedia.org/ */


.mw-parser-output .templatequote{overflow:hidden;margin:1em 0;padding:0 32px}.mw-parser-output .templatequotecite{line-height:1.5em;text-align:left;margin-top:0}@media(min-width:500px){.mw-parser-output .templatequotecite{padding-left:1.6em}}


/* end https://en.wikipedia.org/ */
</style><blockquote class="templatequote"><p>D is a general-purpose systems programming language with a C-like syntax that compiles to native code. It is statically typed and supports both automatic (garbage collected) and manual memory management. D programs are structured as modules that can be compiled separately and linked with external libraries to create native libraries or executables.<sup id="cite_ref-11" class="reference"><a href="#cite_note-11"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup></p></blockquote>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="Features">Features</h2></div>
<p>D is not <a href="Source-code_compatibility" title="Source-code compatibility">source-compatible</a> with C and C++ source code in general. However, any code that is legal in both C/C++ and D should behave in the same way.
</p><p>Like C++, D has <a href="Closure_(computer_science)" class="mw-redirect" title="Closure (computer science)">closures</a>, <a href="Anonymous_functions" class="mw-redirect" title="Anonymous functions">anonymous functions</a>, <a href="Compile-time_function_execution" title="Compile-time function execution">compile-time function execution</a>, <a href="Design_by_contract" title="Design by contract">design by contract</a>, ranges, built-in container iteration concepts, and <a href="Type_inference" title="Type inference">type inference</a>. D's declaration, statement and expression <a href="Syntax" title="Syntax">syntaxes</a> also closely match those of C++.
</p><p>Unlike C++, D also implements <a href="Garbage_collection_(computer_science)" title="Garbage collection (computer science)">garbage collection</a>, <a href="First-class_citizen" title="First-class citizen">first class</a> <a href="Array_data_type" class="mw-redirect" title="Array data type">arrays</a> (<code>std::array</code> in C++ are technically not first class), <a href="Array_slicing" title="Array slicing">array slicing</a>, <a href="Nested_function" title="Nested function">nested functions</a> and <a href="Lazy_evaluation" title="Lazy evaluation">lazy evaluation</a>. D uses Java-style single inheritance with <a href="Interface_(computer_science)" class="mw-redirect" title="Interface (computer science)">interfaces</a> and <a href="Mixin" title="Mixin">mixins</a> rather than C++-style <a href="Multiple_inheritance" title="Multiple inheritance">multiple inheritance</a>.
</p><p>D is a systems programming language. Like C++, and unlike application languages such as <a href="Java_(programming_language)" title="Java (programming language)">Java</a> and <a href="C_Sharp_(programming_language)" title="C Sharp (programming language)">C#</a>, D supports <a href="Low-level_programming_language" title="Low-level programming language">low-level programming</a>, including <a href="Inline_assembler" title="Inline assembler">inline assembler</a>. Inline assembler allows programmers to enter machine-specific <a href="Assembly_language" title="Assembly language">assembly code</a> within standard D code. System programmers use this method to access the low-level features of the <a href="Central_processing_unit" title="Central processing unit">processor</a> that are needed to run programs that interface directly with the underlying <a href="Computer_hardware" title="Computer hardware">hardware</a>, such as <a href="Operating_system" title="Operating system">operating systems</a> and <a href="Device_driver" title="Device driver">device drivers</a>. Low-level programming is also used to write higher <a href="Computer_performance" title="Computer performance">performance</a> code than would be produced by a <a href="Compiler" title="Compiler">compiler</a>.
</p><p>D supports <a href="Function_overloading" title="Function overloading">function overloading</a> and <a href="Operator_overloading" title="Operator overloading">operator overloading</a>. Symbols (<a href="Function_(computer_programming)" title="Function (computer programming)">functions</a>, <a href="Variable_(computer_science)" title="Variable (computer science)">variables</a>, <a href="Class_(computer_programming)" title="Class (computer programming)">classes</a>) can be declared in any order; <a href="Forward_declaration" title="Forward declaration">forward declarations</a> are not needed.
</p><p>In D, text character strings are arrays of characters, and arrays in D are bounds-checked.<sup id="cite_ref-12" class="reference"><a href="#cite_note-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup> D has <a href="First-class_citizen" title="First-class citizen">first class types</a> for complex and imaginary numbers.<sup id="cite_ref-13" class="reference"><a href="#cite_note-13"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Programming_paradigms">Programming paradigms</h3></div>
<p>D supports five main <a href="Programming_paradigm" title="Programming paradigm">programming paradigms</a>:
</p>
<ul><li><a href="Concurrent_programming_language" class="mw-redirect" title="Concurrent programming language">Concurrent</a> (<a href="Actor_model" title="Actor model">actor model</a>)</li>
<li><a href="Object-oriented_programming" title="Object-oriented programming">Object-oriented</a></li>
<li><a href="Imperative_programming" title="Imperative programming">Imperative</a></li>
<li><a href="Functional_programming" title="Functional programming">Functional</a></li>
<li><a href="Metaprogramming" title="Metaprogramming">Metaprogramming</a></li></ul>
<div class="mw-heading mw-heading4"><h4 id="Imperative">Imperative</h4></div>
<p>Imperative programming in D is almost identical to that in C. Functions, data, statements, declarations and expressions work just as they do in C, and the C runtime library may be accessed directly. On the other hand, unlike C, D's <a href="Foreach" class="mw-redirect" title="Foreach"><code>foreach</code></a> loop construct allows looping over a collection. D also allows <a href="Nested_function" title="Nested function">nested functions</a>, which are functions that are declared inside another function, and which may access the enclosing function's <a href="Local_variable" title="Local variable">local variables</a>.
</p>
<div class="mw-highlight mw-highlight-lang-d mw-content-ltr" dir="ltr"><pre><span class="k">import</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">stdio</span><span class="p">;</span>

<span class="kt">void</span><span class="w"> </span><span class="n">main</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">multiplier</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="mi">10</span><span class="p">;</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">scaled</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">x</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="p">*</span><span class="w"> </span><span class="n">multiplier</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>

<span class="w"> </span><span class="k">foreach</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="p">;</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="p">..</span><span class="w"> </span><span class="mi">10</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">writefln</span><span class="p">(</span><span class="s">"Hello, world %d! scaled = %d"</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="p">,</span><span class="w"> </span><span class="n">scaled</span><span class="p">(</span><span class="n">i</span><span class="p">));</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading4"><h4 id="Object-oriented">Object-oriented</h4></div>
<p>Object-oriented programming in D is based on a single <a href="Inheritance_(object-oriented_programming)" title="Inheritance (object-oriented programming)">inheritance</a> hierarchy, with all classes derived from class Object. D does not support multiple inheritance; instead, it uses Java-style <a href="Interface_(Java)" title="Interface (Java)">interfaces</a>, which are comparable to C++'s pure abstract classes, and <a href="Mixin" title="Mixin">mixins</a>, which separate common functionality from the inheritance hierarchy. D also allows the defining of static and final (non-virtual) methods in interfaces.
</p><p>Interfaces and inheritance in D support <a href="Covariance_and_contravariance_(computer_science)" title="Covariance and contravariance (computer science)">covariant types</a> for return types of overridden methods.
</p><p>D supports type forwarding, as well as optional custom <a href="Dynamic_dispatch" title="Dynamic dispatch">dynamic dispatch</a>.
</p><p>Classes (and interfaces) in D can contain <a href="Class_invariant" title="Class invariant">invariants</a> which are automatically checked before and after entry to public methods, in accordance with the <a href="Design_by_contract" title="Design by contract">design by contract</a> methodology.
</p><p>Many aspects of classes (and structs) can be <a href="Type_introspection" title="Type introspection">introspected</a> automatically at compile time (a form of <a href="Reflective_programming" title="Reflective programming">reflective programming</a> (reflection) using <code>type traits</code>) and at run time (RTTI / <code>TypeInfo</code>), to facilitate generic code or automatic code generation (usually using compile-time techniques).
</p>
<div class="mw-heading mw-heading4"><h4 id="Functional">Functional</h4></div>
<p>D supports <a href="Functional_programming" title="Functional programming">functional programming</a> features such as <a href="Anonymous_function" title="Anonymous function">function literals</a>, <a href="Closure_(computer_science)" class="mw-redirect" title="Closure (computer science)">closures</a>, recursively-immutable objects and the use of <a href="Higher-order_function" title="Higher-order function">higher-order functions</a>. There are two syntaxes for anonymous functions, including a multiple-statement form and a "shorthand" single-expression notation:<sup id="cite_ref-short_14-0" class="reference"><a href="#cite_note-short-14"><span class="cite-bracket">[</span>14<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-highlight mw-highlight-lang-d mw-content-ltr" dir="ltr"><pre><span class="kt">int</span><span class="w"> </span><span class="k">function</span><span class="p">(</span><span class="kt">int</span><span class="p">)</span><span class="w"> </span><span class="n">g</span><span class="p">;</span>
<span class="n">g</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="p">(</span><span class="n">x</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="p">*</span><span class="w"> </span><span class="n">x</span><span class="p">;</span><span class="w"> </span><span class="p">};</span><span class="w"> </span><span class="c1">// longhand</span>
<span class="n">g</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="p">(</span><span class="n">x</span><span class="p">)</span><span class="w"> </span><span class="p">=&gt;</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="p">*</span><span class="w"> </span><span class="n">x</span><span class="p">;</span><span class="w"> </span><span class="c1">// shorthand</span>
</pre></div>
<p>There are two built-in types for function literals, <code>function</code>, which is simply a pointer to a stack-allocated function, and <code>delegate</code>, which also includes a pointer to the relevant <a href="Stack_frame" class="mw-redirect" title="Stack frame">stack frame</a>, the surrounding ‘environment’, which contains the current local variables. Type inference may be used with an anonymous function, in which case the compiler creates a <code>delegate</code> unless it can prove that an environment pointer is not necessary. Likewise, to implement a closure, the compiler places enclosed local variables on the <a href="Heap_(data_structure)" title="Heap (data structure)">heap</a> only if necessary (for example, if a closure is returned by another function, and exits that function's scope). When using type inference, the compiler will also add attributes such as <code>pure</code> and <code>nothrow</code> to a function's type, if it can prove that they apply.
</p><p>Other functional features such as <a href="Currying" title="Currying">currying</a> and common higher-order functions such as <a href="Map_(higher-order_function)" title="Map (higher-order function)">map</a>, <a href="Filter_(higher-order_function)" title="Filter (higher-order function)">filter</a>, and <a href="Fold_(higher-order_function)" title="Fold (higher-order function)">reduce</a> are available through the standard library modules <code>std.functional</code> and <code>std.algorithm</code>.
</p>
<div class="mw-highlight mw-highlight-lang-d mw-content-ltr" dir="ltr"><pre><span class="k">import</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">stdio</span><span class="p">,</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">algorithm</span><span class="p">,</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">range</span><span class="p">;</span>

<span class="kt">void</span><span class="w"> </span><span class="n">main</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kt">int</span><span class="p">[]</span><span class="w"> </span><span class="n">a1</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p">,</span><span class="w"> </span><span class="mi">6</span><span class="p">,</span><span class="w"> </span><span class="mi">7</span><span class="p">,</span><span class="w"> </span><span class="mi">8</span><span class="p">,</span><span class="w"> </span><span class="mi">9</span><span class="p">];</span>
<span class="w"> </span><span class="kt">int</span><span class="p">[]</span><span class="w"> </span><span class="n">a2</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="p">[</span><span class="mi">6</span><span class="p">,</span><span class="w"> </span><span class="mi">7</span><span class="p">,</span><span class="w"> </span><span class="mi">8</span><span class="p">,</span><span class="w"> </span><span class="mi">9</span><span class="p">];</span>

<span class="w"> </span><span class="c1">// must be immutable to allow access from inside a pure function</span>
<span class="w"> </span><span class="k">immutable</span><span class="w"> </span><span class="n">pivot</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="mi">5</span><span class="p">;</span>

<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">mySum</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">b</span><span class="p">)</span><span class="w"> </span><span class="k">pure</span><span class="w"> </span><span class="k">nothrow</span><span class="w"> </span><span class="cm">/* pure function */</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">b</span><span class="w"> </span><span class="p">&lt;=</span><span class="w"> </span><span class="n">pivot</span><span class="p">)</span><span class="w"> </span><span class="c1">// ref to enclosing-scope</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="p">+</span><span class="w"> </span><span class="n">b</span><span class="p">;</span>
<span class="w"> </span><span class="k">else</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">a</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>

<span class="w"> </span><span class="c1">// passing a delegate (closure)</span>
<span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">reduce</span><span class="p">!</span><span class="n">mySum</span><span class="p">(</span><span class="n">chain</span><span class="p">(</span><span class="n">a1</span><span class="p">,</span><span class="w"> </span><span class="n">a2</span><span class="p">));</span>
<span class="w"> </span><span class="n">writeln</span><span class="p">(</span><span class="s">"Result: "</span><span class="p">,</span><span class="w"> </span><span class="n">result</span><span class="p">);</span><span class="w"> </span><span class="c1">// Result: 15</span>

<span class="w"> </span><span class="c1">// passing a delegate literal</span>
<span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">reduce</span><span class="p">!((</span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="p">)</span><span class="w"> </span><span class="p">=&gt;</span><span class="w"> </span><span class="p">(</span><span class="n">b</span><span class="w"> </span><span class="p">&lt;=</span><span class="w"> </span><span class="n">pivot</span><span class="p">)</span><span class="w"> </span><span class="p">?</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="p">+</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">a</span><span class="p">)(</span><span class="n">chain</span><span class="p">(</span><span class="n">a1</span><span class="p">,</span><span class="w"> </span><span class="n">a2</span><span class="p">));</span>
<span class="w"> </span><span class="n">writeln</span><span class="p">(</span><span class="s">"Result: "</span><span class="p">,</span><span class="w"> </span><span class="n">result</span><span class="p">);</span><span class="w"> </span><span class="c1">// Result: 15</span>
<span class="p">}</span>
</pre></div>
<p>Alternatively, the above function compositions can be expressed using Uniform function call syntax (UFCS) for more natural left-to-right reading:
</p>
<div class="mw-highlight mw-highlight-lang-d mw-content-ltr" dir="ltr"><pre><span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">a1</span><span class="p">.</span><span class="n">chain</span><span class="p">(</span><span class="n">a2</span><span class="p">).</span><span class="n">reduce</span><span class="p">!</span><span class="n">mySum</span><span class="p">();</span>
<span class="w"> </span><span class="n">writeln</span><span class="p">(</span><span class="s">"Result: "</span><span class="p">,</span><span class="w"> </span><span class="n">result</span><span class="p">);</span>

<span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">a1</span><span class="p">.</span><span class="n">chain</span><span class="p">(</span><span class="n">a2</span><span class="p">).</span><span class="n">reduce</span><span class="p">!((</span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="p">)</span><span class="w"> </span><span class="p">=&gt;</span><span class="w"> </span><span class="p">(</span><span class="n">b</span><span class="w"> </span><span class="p">&lt;=</span><span class="w"> </span><span class="n">pivot</span><span class="p">)</span><span class="w"> </span><span class="p">?</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="p">+</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">a</span><span class="p">)();</span>
<span class="w"> </span><span class="n">writeln</span><span class="p">(</span><span class="s">"Result: "</span><span class="p">,</span><span class="w"> </span><span class="n">result</span><span class="p">);</span>
</pre></div>
<div class="mw-heading mw-heading4"><h4 id="Parallelism">Parallelism</h4></div>
<p>Parallel programming concepts are implemented in the library, and do not require extra support from the compiler. However the D type system and compiler ensure that data sharing can be detected and managed transparently.
</p>
<div class="mw-highlight mw-highlight-lang-d mw-content-ltr" dir="ltr"><pre><span class="k">import</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">stdio</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">writeln</span><span class="p">;</span>
<span class="k">import</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">range</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">iota</span><span class="p">;</span>
<span class="k">import</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">parallelism</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">parallel</span><span class="p">;</span>

<span class="kt">void</span><span class="w"> </span><span class="n">main</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">foreach</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="p">;</span><span class="w"> </span><span class="n">iota</span><span class="p">(</span><span class="mi">11</span><span class="p">).</span><span class="n">parallel</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// The body of the foreach loop is executed in parallel for each i</span>
<span class="w"> </span><span class="n">writeln</span><span class="p">(</span><span class="s">"processing "</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<p><code>iota(11).parallel</code> is equivalent to <code>std.parallelism.parallel(iota(11))</code> by using UFCS.
</p><p>The same module also supports <code>taskPool</code> which can be used for dynamic creation of parallel tasks, as well as map-filter-reduce and fold style operations on ranges (and arrays), which is useful when combined with functional operations. <code>std.algorithm.map</code> returns a lazily evaluated range rather than an array. This way, the elements are computed by each worker task in parallel automatically.
</p>
<div class="mw-highlight mw-highlight-lang-d mw-content-ltr" dir="ltr"><pre><span class="k">import</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">stdio</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">writeln</span><span class="p">;</span>
<span class="k">import</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">algorithm</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">map</span><span class="p">;</span>
<span class="k">import</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">range</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">iota</span><span class="p">;</span>
<span class="k">import</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">parallelism</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">taskPool</span><span class="p">;</span>

<span class="cm">/* On Intel i7-3930X and gdc 9.3.0:</span>
<span class="cm"> * 5140ms using std.algorithm.reduce</span>
<span class="cm"> * 888ms using std.parallelism.taskPool.reduce</span>
<span class="cm"> *</span>
<span class="cm"> * On AMD Threadripper 2950X, and gdc 9.3.0:</span>
<span class="cm"> * 2864ms using std.algorithm.reduce</span>
<span class="cm"> * 95ms using std.parallelism.taskPool.reduce</span>
<span class="cm"> */</span>
<span class="kt">void</span><span class="w"> </span><span class="n">main</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">nums</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">iota</span><span class="p">(</span><span class="mf">1.0</span><span class="p">,</span><span class="w"> </span><span class="mf">1_000_000_000.0</span><span class="p">);</span>

<span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">taskPool</span><span class="p">.</span><span class="n">reduce</span><span class="p">!</span><span class="s">"a + b"</span><span class="p">(</span>
<span class="w"> </span><span class="mf">0.0</span><span class="p">,</span><span class="w"> </span><span class="n">map</span><span class="p">!</span><span class="s">"1.0 / (a * a)"</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span>
<span class="w"> </span><span class="p">);</span>

<span class="w"> </span><span class="n">writeln</span><span class="p">(</span><span class="s">"Sum: "</span><span class="p">,</span><span class="w"> </span><span class="n">x</span><span class="p">);</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading4"><h4 id="Concurrency">Concurrency</h4></div>
<p>Concurrency is fully implemented in the library, and it does not require support from the compiler. Alternative implementations and methodologies of writing concurrent code are possible. The use of D typing system does help ensure memory safety.
</p>
<div class="mw-highlight mw-highlight-lang-d mw-content-ltr" dir="ltr"><pre><span class="k">import</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">stdio</span><span class="p">,</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">concurrency</span><span class="p">,</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">variant</span><span class="p">;</span>

<span class="kt">void</span><span class="w"> </span><span class="n">foo</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="n">cont</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">true</span><span class="p">;</span>

<span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="n">cont</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">receive</span><span class="p">(</span><span class="w"> </span><span class="c1">// Delegates are used to match the message type.</span>
<span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">msg</span><span class="p">)</span><span class="w"> </span><span class="p">=&gt;</span><span class="w"> </span><span class="n">writeln</span><span class="p">(</span><span class="s">"int received: "</span><span class="p">,</span><span class="w"> </span><span class="n">msg</span><span class="p">),</span>
<span class="w"> </span><span class="p">(</span><span class="n">Tid</span><span class="w"> </span><span class="n">sender</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">cont</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="kc">false</span><span class="p">;</span><span class="w"> </span><span class="n">sender</span><span class="p">.</span><span class="n">send</span><span class="p">(-</span><span class="mi">1</span><span class="p">);</span><span class="w"> </span><span class="p">},</span>
<span class="w"> </span><span class="p">(</span><span class="n">Variant</span><span class="w"> </span><span class="n">v</span><span class="p">)</span><span class="w"> </span><span class="p">=&gt;</span><span class="w"> </span><span class="n">writeln</span><span class="p">(</span><span class="s">"huh?"</span><span class="p">)</span><span class="w"> </span><span class="c1">// Variant matches any type</span>
<span class="w"> </span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>

<span class="kt">void</span><span class="w"> </span><span class="n">main</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">tid</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">spawn</span><span class="p">(&amp;</span><span class="n">foo</span><span class="p">);</span><span class="w"> </span><span class="c1">// spawn a new thread running foo()</span>

<span class="w"> </span><span class="k">foreach</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="p">;</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="p">..</span><span class="w"> </span><span class="mi">10</span><span class="p">)</span>
<span class="w"> </span><span class="n">tid</span><span class="p">.</span><span class="n">send</span><span class="p">(</span><span class="n">i</span><span class="p">);</span><span class="w"> </span><span class="c1">// send some integers</span>

<span class="w"> </span><span class="n">tid</span><span class="p">.</span><span class="n">send</span><span class="p">(</span><span class="mf">1.0f</span><span class="p">);</span><span class="w"> </span><span class="c1">// send a float</span>
<span class="w"> </span><span class="n">tid</span><span class="p">.</span><span class="n">send</span><span class="p">(</span><span class="s">"hello"</span><span class="p">);</span><span class="w"> </span><span class="c1">// send a string</span>
<span class="w"> </span><span class="n">tid</span><span class="p">.</span><span class="n">send</span><span class="p">(</span><span class="n">thisTid</span><span class="p">);</span><span class="w"> </span><span class="c1">// send a struct (Tid)</span>

<span class="w"> </span><span class="n">receive</span><span class="p">((</span><span class="kt">int</span><span class="w"> </span><span class="n">x</span><span class="p">)</span><span class="w"> </span><span class="p">=&gt;</span><span class="w"> </span><span class="n">writeln</span><span class="p">(</span><span class="s">"Main thread received message: "</span><span class="p">,</span><span class="w"> </span><span class="n">x</span><span class="p">));</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading4"><h4 id="Metaprogramming">Metaprogramming</h4></div>
<p><a href="Metaprogramming" title="Metaprogramming">Metaprogramming</a> is supported through templates, compile-time function execution, <a href="Tuple" title="Tuple">tuples</a>, and string mixins. The following examples demonstrate some of D's compile-time features.
</p><p>Templates in D can be written in a more imperative style compared to the C++ functional style for templates. This is a regular function that calculates the <a href="Factorial" title="Factorial">factorial</a> of a number:
</p>
<div class="mw-highlight mw-highlight-lang-d mw-content-ltr" dir="ltr"><pre><span class="kt">ulong</span><span class="w"> </span><span class="n">factorial</span><span class="p">(</span><span class="kt">ulong</span><span class="w"> </span><span class="n">n</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">n</span><span class="w"> </span><span class="p">&lt;</span><span class="w"> </span><span class="mi">2</span><span class="p">)</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
<span class="w"> </span><span class="k">else</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">n</span><span class="w"> </span><span class="p">*</span><span class="w"> </span><span class="n">factorial</span><span class="p">(</span><span class="n">n</span><span class="p">-</span><span class="mi">1</span><span class="p">);</span>
<span class="p">}</span>
</pre></div>
<p>Here, the use of <code>static if</code>, D's compile-time conditional construct, is demonstrated to construct a template that performs the same calculation using code that is similar to that of the function above:
</p>
<div class="mw-highlight mw-highlight-lang-d mw-content-ltr" dir="ltr"><pre><span class="k">template</span><span class="w"> </span><span class="n">Factorial</span><span class="p">(</span><span class="kt">ulong</span><span class="w"> </span><span class="n">n</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">n</span><span class="w"> </span><span class="p">&lt;</span><span class="w"> </span><span class="mi">2</span><span class="p">)</span>
<span class="w"> </span><span class="k">enum</span><span class="w"> </span><span class="n">Factorial</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
<span class="w"> </span><span class="k">else</span>
<span class="w"> </span><span class="k">enum</span><span class="w"> </span><span class="n">Factorial</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">n</span><span class="w"> </span><span class="p">*</span><span class="w"> </span><span class="n">Factorial</span><span class="p">!(</span><span class="n">n</span><span class="p">-</span><span class="mi">1</span><span class="p">);</span>
<span class="p">}</span>
</pre></div>
<p>In the following two examples, the template and function defined above are used to compute factorials. The types of constants need not be specified explicitly as the compiler <a href="Type_inference" title="Type inference">infers their types</a> from the right-hand sides of assignments:
</p>
<div class="mw-highlight mw-highlight-lang-d mw-content-ltr" dir="ltr"><pre><span class="k">enum</span><span class="w"> </span><span class="n">fact_7</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">Factorial</span><span class="p">!(</span><span class="mi">7</span><span class="p">);</span>
</pre></div>
<p>This is an example of <a href="Compile-time_function_execution" title="Compile-time function execution">compile-time function execution</a> (CTFE). Ordinary functions may be used in constant, compile-time expressions provided they meet certain criteria:
</p>
<div class="mw-highlight mw-highlight-lang-d mw-content-ltr" dir="ltr"><pre><span class="k">enum</span><span class="w"> </span><span class="n">fact_9</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">factorial</span><span class="p">(</span><span class="mi">9</span><span class="p">);</span>
</pre></div>
<p>The <code>std.string.format</code> function performs <a href="Printf" title="Printf"><code>printf</code></a>-like data formatting (also at compile-time, through CTFE), and the "msg" <a href="Directive_(programming)" title="Directive (programming)">pragma</a> displays the result at compile time:
</p>
<div class="mw-highlight mw-highlight-lang-d mw-content-ltr" dir="ltr"><pre><span class="k">import</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="nb">string</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">format</span><span class="p">;</span>
<span class="k">pragma</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span><span class="w"> </span><span class="n">format</span><span class="p">(</span><span class="s">"7! = %s"</span><span class="p">,</span><span class="w"> </span><span class="n">fact_7</span><span class="p">));</span>
<span class="k">pragma</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span><span class="w"> </span><span class="n">format</span><span class="p">(</span><span class="s">"9! = %s"</span><span class="p">,</span><span class="w"> </span><span class="n">fact_9</span><span class="p">));</span>
</pre></div>
<p>String mixins, combined with compile-time function execution, allow for the generation of D code using string operations at compile time. This can be used to parse <a href="Domain-specific_language" title="Domain-specific language">domain-specific languages</a>, which will be compiled as part of the program:
</p>
<div class="mw-highlight mw-highlight-lang-d mw-content-ltr" dir="ltr"><pre><span class="k">import</span><span class="w"> </span><span class="n">FooToD</span><span class="p">;</span><span class="w"> </span><span class="c1">// hypothetical module which contains a function that parses Foo source code</span>
<span class="w"> </span><span class="c1">// and returns equivalent D code</span>
<span class="kt">void</span><span class="w"> </span><span class="n">main</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">mixin</span><span class="p">(</span><span class="n">fooToD</span><span class="p">(</span><span class="k">import</span><span class="p">(</span><span class="s">"example.foo"</span><span class="p">)));</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Memory_management">Memory management</h3></div>
<p>Memory is usually managed with <a href="Garbage_collection_(computer_science)" title="Garbage collection (computer science)">garbage collection</a>, but specific objects may be finalized immediately when they go out of scope. This is what the majority of programs and libraries written in D use.
</p><p>In case more control over memory layout and better performance is needed, explicit memory management is possible using the <a href="Operator_overloading" title="Operator overloading">overloaded operator</a> <code>new</code>, by calling <a href="C_(programming_language)" title="C (programming language)">C</a>'s <a href="Malloc" class="mw-redirect" title="Malloc">malloc and free</a> directly, or implementing custom allocator schemes (i.e. on stack with fallback, RAII style allocation, reference counting, shared reference counting). Garbage collection can be controlled: programmers may add and exclude memory ranges from being observed by the collector, can disable and enable the collector and force either a generational or full collection cycle.<sup id="cite_ref-15" class="reference"><a href="#cite_note-15"><span class="cite-bracket">[</span>15<span class="cite-bracket">]</span></a></sup> The manual gives many examples of how to implement different highly optimized memory management schemes for when garbage collection is inadequate in a program.<sup id="cite_ref-16" class="reference"><a href="#cite_note-16"><span class="cite-bracket">[</span>16<span class="cite-bracket">]</span></a></sup>
</p><p>In functions, <code>struct</code> instances are by default allocated on the stack, while <code>class</code> instances by default allocated on the heap (with only reference to the class instance being on the stack). However this can be changed for classes, for example using standard library template <code>std.typecons.scoped</code>, or by using <code>new</code> for structs and assigning to a pointer instead of a value-based variable.<sup id="cite_ref-dlang.org_17-0" class="reference"><a href="#cite_note-dlang.org-17"><span class="cite-bracket">[</span>17<span class="cite-bracket">]</span></a></sup>
</p><p>In functions, static arrays (of known size) are allocated on the stack. For dynamic arrays, one can use the <code>core.stdc.stdlib.alloca</code> function (similar to <code>alloca</code> in C), to allocate memory on the stack. The returned pointer can be used (recast) into a (typed) dynamic array, by means of a slice (however resizing array, including appending must be avoided; and for obvious reasons they must not be returned from the function).<sup id="cite_ref-dlang.org_17-1" class="reference"><a href="#cite_note-dlang.org-17"><span class="cite-bracket">[</span>17<span class="cite-bracket">]</span></a></sup>
</p><p>A <code>scope</code> keyword can be used both to annotate parts of code, but also variables and classes/structs, to indicate they should be destroyed (destructor called) immediately on scope exit. Whatever the memory is deallocated also depends on implementation and class-vs-struct differences.<sup id="cite_ref-18" class="reference"><a href="#cite_note-18"><span class="cite-bracket">[</span>18<span class="cite-bracket">]</span></a></sup>
</p><p><code>std.experimental.allocator</code> contains a modular and composable allocator templates, to create custom high performance allocators for special use cases.<sup id="cite_ref-19" class="reference"><a href="#cite_note-19"><span class="cite-bracket">[</span>19<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="SafeD">SafeD</h3></div>
<p>SafeD<sup id="cite_ref-SafeD_20-0" class="reference"><a href="#cite_note-SafeD-20"><span class="cite-bracket">[</span>20<span class="cite-bracket">]</span></a></sup>
is the name given to the subset of D that can be guaranteed to be <a href="Memory_safety" title="Memory safety">memory safe</a>. Functions marked <code>@safe</code> are checked at compile time to ensure that they do not use any features, such as pointer arithmetic and unchecked casts, that could result in corruption of memory. Any other functions called must also be marked as <code>@safe</code> or <code>@trusted</code>. Functions can be marked <code>@trusted</code> for the cases where the compiler cannot distinguish between safe use of a feature that is disabled in SafeD and a potential case of memory corruption.<sup id="cite_ref-21" class="reference"><a href="#cite_note-21"><span class="cite-bracket">[</span>21<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading4"><h4 id="Scope_lifetime_safety">Scope lifetime safety</h4></div>
<p>Initially under the banners of DIP1000<sup id="cite_ref-22" class="reference"><a href="#cite_note-22"><span class="cite-bracket">[</span>22<span class="cite-bracket">]</span></a></sup> and DIP25<sup id="cite_ref-23" class="reference"><a href="#cite_note-23"><span class="cite-bracket">[</span>23<span class="cite-bracket">]</span></a></sup> (now part of the language specification<sup id="cite_ref-24" class="reference"><a href="#cite_note-24"><span class="cite-bracket">[</span>24<span class="cite-bracket">]</span></a></sup>), D provides protections against certain ill-formed constructions involving the lifetimes of data.
</p><p>The current mechanisms in place primarily deal with function parameters and stack memory however it is a stated ambition of the leadership of the programming language to provide a more thorough treatment of lifetimes within the D programming language<sup id="cite_ref-25" class="reference"><a href="#cite_note-25"><span class="cite-bracket">[</span>25<span class="cite-bracket">]</span></a></sup> (influenced by ideas from <a href="Rust_(programming_language)" title="Rust (programming language)">Rust programming language</a>).
</p>
<div class="mw-heading mw-heading4"><h4 id="Lifetime_safety_of_assignments">Lifetime safety of assignments</h4></div>
<p>Within @safe code, the lifetime of an assignment involving a <a href="Reference_type" class="mw-redirect" title="Reference type">reference type</a> is checked to ensure that the lifetime of the assignee is longer than that of the assigned.
</p><p>For example:
</p>
<div class="mw-highlight mw-highlight-lang-d mw-content-ltr" dir="ltr"><pre><span class="nd">@safe</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="n">test</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">tmp</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="c1">// #1</span>
<span class="w"> </span><span class="kt">int</span><span class="p">*</span><span class="w"> </span><span class="n">rad</span><span class="p">;</span><span class="w"> </span><span class="c1">// #2</span>
<span class="w"> </span><span class="n">rad</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="p">&amp;</span><span class="n">tmp</span><span class="p">;</span><span class="w"> </span><span class="c1">// If the order of the declarations of #1 and #2 is reversed, this fails.</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">bad</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="mi">45</span><span class="p">;</span><span class="w"> </span><span class="c1">// The lifetime of "bad" only extends to the scope in which it is defined.</span>
<span class="w"> </span><span class="p">*</span><span class="n">rad</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">bad</span><span class="p">;</span><span class="w"> </span><span class="c1">// This is valid.</span>
<span class="w"> </span><span class="n">rad</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="p">&amp;</span><span class="n">bad</span><span class="p">;</span><span class="w"> </span><span class="c1">// The lifetime of rad is longer than bad, hence this is not valid.</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading4"><h4 id="Function_parameter_lifetime_annotations_within_@safe_code">Function parameter lifetime annotations within @safe code</h4></div>
<p>When applied to function parameter which are either of pointer type or references, the keywords <i>return</i> and <i>scope</i> constrain the lifetime and use of that parameter.
</p><p>The language standard dictates the following behaviour:<sup id="cite_ref-26" class="reference"><a href="#cite_note-26"><span class="cite-bracket">[</span>26<span class="cite-bracket">]</span></a></sup>
</p>
<table class="wikitable">
<caption>
</caption>
<tbody><tr>
<th>Storage Class
</th>
<th>Behaviour (and constraints to) of a parameter with the storage class
</th></tr>
<tr>
<td><i>scope</i>
</td>
<td>References in the parameter cannot be escaped. Ignored for parameters with no references
</td></tr>
<tr>
<td><i>return</i>
</td>
<td>Parameter may be returned (or, in case of <code>void</code> functions: copied to the first parameter), but otherwise does not escape from the function. Such copies are required not to outlive the argument(s) they were derived from. Ignored for parameters with no references
</td></tr></tbody></table><p>
An annotated example is given below.</p><div class="mw-highlight mw-highlight-lang-d mw-content-ltr" dir="ltr"><pre><span class="nd">@safe</span><span class="p">:</span>

<span class="kt">int</span><span class="p">*</span><span class="w"> </span><span class="n">gp</span><span class="p">;</span>
<span class="kt">void</span><span class="w"> </span><span class="n">thorin</span><span class="p">(</span><span class="k">scope</span><span class="w"> </span><span class="kt">int</span><span class="p">*);</span>
<span class="kt">void</span><span class="w"> </span><span class="n">gloin</span><span class="p">(</span><span class="kt">int</span><span class="p">*);</span>
<span class="kt">int</span><span class="p">*</span><span class="w"> </span><span class="n">balin</span><span class="p">(</span><span class="k">return</span><span class="w"> </span><span class="k">scope</span><span class="w"> </span><span class="kt">int</span><span class="p">*</span><span class="w"> </span><span class="n">p</span><span class="p">,</span><span class="w"> </span><span class="k">scope</span><span class="w"> </span><span class="kt">int</span><span class="p">*</span><span class="w"> </span><span class="n">q</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="p">*</span><span class="w"> </span><span class="n">r</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">gp</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">p</span><span class="p">;</span><span class="w"> </span><span class="c1">// Error, p escapes to global variable gp.</span>
<span class="w"> </span><span class="n">gp</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">q</span><span class="p">;</span><span class="w"> </span><span class="c1">// Error, q escapes to global variable gp.</span>
<span class="w"> </span><span class="n">gp</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">r</span><span class="p">;</span><span class="w"> </span><span class="c1">// OK.</span>

<span class="w"> </span><span class="n">thorin</span><span class="p">(</span><span class="n">p</span><span class="p">);</span><span class="w"> </span><span class="c1">// OK, p does not escape thorin().</span>
<span class="w"> </span><span class="n">thorin</span><span class="p">(</span><span class="n">q</span><span class="p">);</span><span class="w"> </span><span class="c1">// OK.</span>
<span class="w"> </span><span class="n">thorin</span><span class="p">(</span><span class="n">r</span><span class="p">);</span><span class="w"> </span><span class="c1">// OK.</span>

<span class="w"> </span><span class="n">gloin</span><span class="p">(</span><span class="n">p</span><span class="p">);</span><span class="w"> </span><span class="c1">// Error, p escapes gloin().</span>
<span class="w"> </span><span class="n">gloin</span><span class="p">(</span><span class="n">q</span><span class="p">);</span><span class="w"> </span><span class="c1">// Error, q escapes gloin().</span>
<span class="w"> </span><span class="n">gloin</span><span class="p">(</span><span class="n">r</span><span class="p">);</span><span class="w"> </span><span class="c1">// OK that r escapes gloin().</span>

<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">p</span><span class="p">;</span><span class="w"> </span><span class="c1">// OK.</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">q</span><span class="p">;</span><span class="w"> </span><span class="c1">// Error, cannot return 'scope' q.</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">r</span><span class="p">;</span><span class="w"> </span><span class="c1">// OK.</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Interaction_with_other_systems">Interaction with other systems</h3></div>
<p><a href="C_(programming_language)" title="C (programming language)">C</a>'s <a href="Application_binary_interface" title="Application binary interface">application binary interface (ABI)</a> is supported, as well as all of C's fundamental and derived types, enabling direct access to existing C code and libraries. D <a href="Language_binding" title="Language binding">bindings</a> are available for many popular C libraries. Additionally, C's standard <a href="Library_(computer_science)" class="mw-redirect" title="Library (computer science)">library</a> is part of standard D.
</p><p>On Microsoft Windows, D can access <a href="Component_Object_Model" title="Component Object Model">Component Object Model</a> (COM) code.
</p><p>As long as memory management is properly taken care of, many other languages can be mixed with D in a single binary. For example, the GDC compiler allows to link and intermix C, C++, and other supported language codes such as Objective-C. D code (functions) can also be marked as using C, C++, Pascal ABIs, and thus be passed to the libraries written in these languages as <a href="Callback_(computer_programming)" title="Callback (computer programming)">callbacks</a>. Similarly data can be interchanged between the codes written in these languages in both ways. This usually restricts use to primitive types, pointers, some forms of arrays, <a href="Union_type" title="Union type">unions</a>, structs, and only some types of function pointers.
</p><p>Because many other programming languages often provide the C API for writing extensions or running the interpreter of the languages, D can interface directly with these languages as well, using standard C bindings (with a thin D interface file). For example, there are bi-directional bindings for languages like <a href="Python_(programming_language)" title="Python (programming language)">Python</a>,<sup id="cite_ref-27" class="reference"><a href="#cite_note-27"><span class="cite-bracket">[</span>27<span class="cite-bracket">]</span></a></sup> <a href="Lua_(programming_language)" class="mw-redirect" title="Lua (programming language)">Lua</a><sup id="cite_ref-28" class="reference"><a href="#cite_note-28"><span class="cite-bracket">[</span>28<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-29" class="reference"><a href="#cite_note-29"><span class="cite-bracket">[</span>29<span class="cite-bracket">]</span></a></sup> and other languages, often using compile-time code generation and compile-time type reflection methods.
</p>
<div class="mw-heading mw-heading4"><h4 id="Interaction_with_C++_code">Interaction with C++ code</h4></div>
<p>For D code marked as <code>extern(C++)</code>, the following features are specified:
</p>
<ul><li>The name mangling conventions shall match those of C++ on the target.</li>
<li>For function calls, the ABI shall be equivalent.</li>
<li>The vtable shall be matched up to single inheritance (the only level supported by the D language specification).</li></ul>
<p>C++ namespaces are used via the syntax <code>extern(C++, namespace)</code> where <i>namespace</i> is the name of the C++ namespace.
</p>
<div class="mw-heading mw-heading5"><h5 id="An_example_of_C++_interoperation">An example of C++ interoperation</h5></div>
<p><b>The C++ side</b>
</p>
<div class="mw-highlight mw-highlight-lang-c++ mw-content-ltr" dir="ltr"><pre><span class="k">import</span><span class="w"> </span><span class="n">std</span><span class="p">;</span>

<span class="k">class</span><span class="w"> </span><span class="nc">Base</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">public</span><span class="o">:</span>
<span class="w"> </span><span class="k">virtual</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="n">print3i</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">b</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">c</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="p">};</span>

<span class="k">class</span><span class="w"> </span><span class="nc">Derived</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="n">Base</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">public</span><span class="o">:</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">field</span><span class="p">;</span>
<span class="w"> </span><span class="n">Derived</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">field</span><span class="p">)</span><span class="o">:</span><span class="w"> </span>
<span class="w"> </span><span class="n">field</span><span class="p">(</span><span class="n">field</span><span class="p">)</span><span class="w"> </span><span class="p">{}</span>

<span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="n">print3i</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">b</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">c</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">println</span><span class="p">(</span><span class="s">"a = {}"</span><span class="p">,</span><span class="w"> </span><span class="n">a</span><span class="p">);</span>
<span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">println</span><span class="p">(</span><span class="s">"b = {}"</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="p">);</span>
<span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">println</span><span class="p">(</span><span class="s">"c = {}"</span><span class="p">,</span><span class="w"> </span><span class="n">c</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>

<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">mul</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">factor</span><span class="p">);</span>
<span class="p">};</span>

<span class="kt">int</span><span class="w"> </span><span class="nf">Derived::mul</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">factor</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">field</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">factor</span><span class="p">;</span>
<span class="p">}</span>

<span class="n">Derived</span><span class="o">*</span><span class="w"> </span><span class="nf">createInstance</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Derived</span><span class="p">(</span><span class="n">i</span><span class="p">);</span>
<span class="p">}</span>

<span class="kt">void</span><span class="w"> </span><span class="nf">deleteInstance</span><span class="p">(</span><span class="n">Derived</span><span class="o">*&amp;</span><span class="w"> </span><span class="n">d</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">delete</span><span class="w"> </span><span class="n">d</span><span class="p">;</span>
<span class="w"> </span><span class="n">d</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
<p><b>The D side</b>
</p>
<div class="mw-highlight mw-highlight-lang-d mw-content-ltr" dir="ltr"><pre><span class="k">extern</span><span class="p">(</span><span class="n">C</span><span class="p">++)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">abstract</span><span class="w"> </span><span class="k">class</span><span class="w"> </span><span class="n">Base</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="n">print3i</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">b</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">c</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>

<span class="w"> </span><span class="k">class</span><span class="w"> </span><span class="n">Derived</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">Base</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">field</span><span class="p">;</span>
<span class="w"> </span><span class="nd">@disable</span><span class="w"> </span><span class="k">this</span><span class="p">();</span>
<span class="w"> </span><span class="k">override</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="n">print3i</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">b</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">c</span><span class="p">);</span>
<span class="w"> </span><span class="k">final</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">mul</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">factor</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>

<span class="w"> </span><span class="n">Derived</span><span class="w"> </span><span class="n">createInstance</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="p">);</span>
<span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="n">deleteInstance</span><span class="p">(</span><span class="k">ref</span><span class="w"> </span><span class="n">Derived</span><span class="w"> </span><span class="n">d</span><span class="p">);</span>
<span class="p">}</span>

<span class="kt">void</span><span class="w"> </span><span class="n">main</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">import</span><span class="w"> </span><span class="n">std</span><span class="p">.</span><span class="n">stdio</span><span class="p">;</span>

<span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">d1</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">createInstance</span><span class="p">(</span><span class="mi">5</span><span class="p">);</span>
<span class="w"> </span><span class="n">writeln</span><span class="p">(</span><span class="n">d1</span><span class="p">.</span><span class="n">field</span><span class="p">);</span>
<span class="w"> </span><span class="n">writeln</span><span class="p">(</span><span class="n">d1</span><span class="p">.</span><span class="n">mul</span><span class="p">(</span><span class="mi">4</span><span class="p">));</span>

<span class="w"> </span><span class="n">Base</span><span class="w"> </span><span class="n">b1</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">d1</span><span class="p">;</span>
<span class="w"> </span><span class="n">b1</span><span class="p">.</span><span class="n">print3i</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">);</span>

<span class="w"> </span><span class="n">deleteInstance</span><span class="p">(</span><span class="n">d1</span><span class="p">);</span>
<span class="w"> </span><span class="k">assert</span><span class="p">(</span><span class="n">d1</span><span class="w"> </span><span class="k">is</span><span class="w"> </span><span class="kc">null</span><span class="p">);</span>

<span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">d2</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">createInstance</span><span class="p">(</span><span class="mi">42</span><span class="p">);</span>
<span class="w"> </span><span class="n">writeln</span><span class="p">(</span><span class="n">d2</span><span class="p">.</span><span class="n">field</span><span class="p">);</span>

<span class="w"> </span><span class="n">deleteInstance</span><span class="p">(</span><span class="n">d2</span><span class="p">);</span>
<span class="w"> </span><span class="k">assert</span><span class="p">(</span><span class="n">d2</span><span class="w"> </span><span class="k">is</span><span class="w"> </span><span class="kc">null</span><span class="p">);</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Better_C">Better C</h3></div>
<p>The D programming language has an official subset known as "<span class="nowrap">Better C</span>".<sup id="cite_ref-:0_30-0" class="reference"><a href="#cite_note-:0-30"><span class="cite-bracket">[</span>30<span class="cite-bracket">]</span></a></sup> This subset forbids access to D features requiring use of runtime libraries other than that of C.
</p><p>Enabled via the compiler flags "-betterC" on DMD and LDC, and "-fno-druntime" on GDC, <span class="nowrap">Better C</span> may only call into D code compiled under the same flag (and linked code other than D) but code compiled without the <span class="nowrap">Better C</span> option may call into code compiled with it: this will, however, lead to slightly different behaviours due to differences in how C and D handle asserts.
</p>
<div class="mw-heading mw-heading4"><h4 id="Features_included_in_Better_C">Features included in Better C</h4></div>
<ul><li>Unrestricted use of compile-time features (for example, D's dynamic allocation features can be used at compile time to pre-allocate D data)</li>
<li>Full metaprogramming facilities</li>
<li>Nested functions, nested structs, delegates and lambdas</li>
<li>Member functions, constructors, destructors, operating overloading, etc.</li>
<li>The full module system</li>
<li>Array slicing, and array bounds checking</li>
<li>RAII</li>
<li><b>scope(exit)</b></li>
<li>Memory safety protections</li>
<li>Interfacing with C++</li>
<li>COM classes and C++ classes</li>
<li><b>assert</b> failures are directed to the C runtime library</li>
<li><b>switch</b> with strings</li>
<li><b>final switch</b></li>
<li><b>unittest</b> blocks</li>
<li><b>printf</b> format validation</li></ul>
<div class="mw-heading mw-heading4"><h4 id="Features_excluded_from_Better_C">Features excluded from Better C</h4></div>
<ul><li>Garbage collection</li>
<li>TypeInfo and ModuleInfo</li>
<li>Built-in threading (e.g. <code>core.thread</code>)</li>
<li>Dynamic arrays (though slices of static arrays work) and associative arrays</li>
<li>Exceptions</li>
<li><i>synchronized</i> and <code>core.sync</code></li>
<li>Static module constructors or destructors</li></ul>
<div class="mw-heading mw-heading2"><h2 id="History">History</h2></div>
<p><a href="Walter_Bright" title="Walter Bright">Walter Bright</a> started working on a new language in 1999. D was first released in December 2001<sup id="cite_ref-D1_changelog1_1-1" class="reference"><a href="#cite_note-D1_changelog1-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> and reached version 1.0 in January 2007.<sup id="cite_ref-D1_changelog2_31-0" class="reference"><a href="#cite_note-D1_changelog2-31"><span class="cite-bracket">[</span>31<span class="cite-bracket">]</span></a></sup> The first version of the language (D1) concentrated on the imperative, object oriented and metaprogramming paradigms,<sup id="cite_ref-32" class="reference"><a href="#cite_note-32"><span class="cite-bracket">[</span>32<span class="cite-bracket">]</span></a></sup> similar to C++.
</p><p>Some members of the D community dissatisfied with Phobos, D's official <a href="Runtime_library" title="Runtime library">runtime</a> and <a href="Standard_library" title="Standard library">standard library</a>, created an alternative runtime and standard library named Tango. The first public Tango announcement came within days of D 1.0's release.<sup id="cite_ref-33" class="reference"><a href="#cite_note-33"><span class="cite-bracket">[</span>33<span class="cite-bracket">]</span></a></sup> Tango adopted a different programming style, embracing OOP and high modularity. Being a community-led project, Tango was more open to contributions, which allowed it to progress faster than the official standard library. At that time, Tango and Phobos were incompatible due to different runtime support APIs (the garbage collector, threading support, etc.). This made it impossible to use both libraries in the same project. The existence of two libraries, both widely in use, has led to significant dispute due to some packages using Phobos and others using Tango.<sup id="cite_ref-34" class="reference"><a href="#cite_note-34"><span class="cite-bracket">[</span>34<span class="cite-bracket">]</span></a></sup>
</p><p>In June 2007, the first version of D2 was released.<sup id="cite_ref-D2_changelog_35-0" class="reference"><a href="#cite_note-D2_changelog-35"><span class="cite-bracket">[</span>35<span class="cite-bracket">]</span></a></sup> The beginning of D2's development signaled D1's stabilization. The first version of the language has been placed in maintenance, only receiving corrections and implementation bugfixes. D2 introduced <a href="Breaking_changes" class="mw-redirect" title="Breaking changes">breaking changes</a> to the language, beginning with its first experimental <a href="Const-correctness" class="mw-redirect" title="Const-correctness">const system</a>. D2 later added numerous other language features, such as <a href="Closure_(computer_programming)" title="Closure (computer programming)">closures</a>, <a href="Pure_function" title="Pure function">purity</a>, and support for the functional and concurrent programming paradigms. D2 also solved standard library problems by separating the runtime from the standard library. The completion of a D2 Tango port was announced in February 2012.<sup id="cite_ref-36" class="reference"><a href="#cite_note-36"><span class="cite-bracket">[</span>36<span class="cite-bracket">]</span></a></sup>
</p><p>The release of <a href="Andrei_Alexandrescu" title="Andrei Alexandrescu">Andrei Alexandrescu</a>'s book <i>The D Programming Language</i> on 12 June 2010, marked the stabilization of D2, which today is commonly referred to as just "D".
</p><p>In January 2011, D development moved from a bugtracker / patch-submission basis to <a href="GitHub" title="GitHub">GitHub</a>. This has led to a significant increase in contributions to the compiler, runtime and standard library.<sup id="cite_ref-37" class="reference"><a href="#cite_note-37"><span class="cite-bracket">[</span>37<span class="cite-bracket">]</span></a></sup>
</p><p>In December 2011, Andrei Alexandrescu announced that D1, the first version of the language, would be discontinued on 31 December 2012.<sup id="cite_ref-38" class="reference"><a href="#cite_note-38"><span class="cite-bracket">[</span>38<span class="cite-bracket">]</span></a></sup> The final D1 release, D v1.076, was on 31 December 2012.<sup id="cite_ref-D1_changelog_39-0" class="reference"><a href="#cite_note-D1_changelog-39"><span class="cite-bracket">[</span>39<span class="cite-bracket">]</span></a></sup>
</p><p>Code for the official D compiler, the <i>Digital Mars D compiler</i> by Walter Bright, was originally released under a custom <a href="Software_license" title="Software license">license</a>, qualifying as <a href="Source_available" class="mw-redirect" title="Source available">source available</a> but not conforming to the <a href="Open_Source_Definition" class="mw-redirect" title="Open Source Definition">Open Source Definition</a>.<sup id="cite_ref-D-backend-license_40-0" class="reference"><a href="#cite_note-D-backend-license-40"><span class="cite-bracket">[</span>40<span class="cite-bracket">]</span></a></sup> In 2014, the compiler <a href="Compiler#Front_end" title="Compiler">front-end</a> was <a href="Software_relicensing" title="Software relicensing">re-licensed</a> as <a href="Open-source_software" title="Open-source software">open source</a> under the <a href="Boost_Software_License" class="mw-redirect" title="Boost Software License">Boost Software License</a>.<sup id="cite_ref-D-frontend-license_3-1" class="reference"><a href="#cite_note-D-frontend-license-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> This re-licensed code excluded the back-end, which had been partially developed at <a href="NortonLifeLock" class="mw-redirect" title="NortonLifeLock">Symantec</a>. On 7 April 2017, the whole compiler was made available under the Boost license after Symantec gave permission to re-license the back-end, too.<sup id="cite_ref-boost-backend_4-1" class="reference"><a href="#cite_note-boost-backend-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-41" class="reference"><a href="#cite_note-41"><span class="cite-bracket">[</span>41<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-42" class="reference"><a href="#cite_note-42"><span class="cite-bracket">[</span>42<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-43" class="reference"><a href="#cite_note-43"><span class="cite-bracket">[</span>43<span class="cite-bracket">]</span></a></sup> On 21 June 2017, the D Language was accepted for inclusion in GCC.<sup id="cite_ref-44" class="reference"><a href="#cite_note-44"><span class="cite-bracket">[</span>44<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Implementations">Implementations</h2></div>
<p>Most current D implementations <a href="Compiler" title="Compiler">compile</a> directly into <a href="Machine_code" title="Machine code">machine code</a>.
</p><p>Production ready compilers:
</p>
<ul><li><i>DMD</i> – The <i>Digital Mars D compiler</i> by Walter Bright is the official D compiler; open sourced under the <a href="Boost_Software_License" class="mw-redirect" title="Boost Software License">Boost Software License</a>.<sup id="cite_ref-D-frontend-license_3-2" class="reference"><a href="#cite_note-D-frontend-license-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-boost-backend_4-2" class="reference"><a href="#cite_note-boost-backend-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> The DMD frontend is shared by GDC (now in GCC) and LDC, to improve compatibility between compilers. Initially the frontend was written in C++, but now most of it is written in D itself (self-hosting). The backend and machine code optimizers are based on the Symantec compiler. At first it supported only 32-bit x86, with support added for 64-bit amd64 and PowerPC by Walter Bright.</li></ul>
<dl><dd>Bright said in 2020 "The biggest project is implementing the D compiler itself in 100% D".<sup id="cite_ref-bright20200526_45-0" class="reference"><a href="#cite_note-bright20200526-45"><span class="cite-bracket">[</span>45<span class="cite-bracket">]</span></a></sup> The backend and almost the entire compiler was ported from C++ to D for full <a href="Bootstrapping_(compilers)" title="Bootstrapping (compilers)">bootstrapping</a>.</dd></dl>
<ul><li><i>GCC</i> – The <a href="GNU_Compiler_Collection" title="GNU Compiler Collection">GNU Compiler Collection</a>, merged GDC<sup id="cite_ref-46" class="reference"><a href="#cite_note-46"><span class="cite-bracket">[</span>46<span class="cite-bracket">]</span></a></sup> into GCC 9 on 29 October 2018.<sup id="cite_ref-47" class="reference"><a href="#cite_note-47"><span class="cite-bracket">[</span>47<span class="cite-bracket">]</span></a></sup> The first working versions of GDC with GCC, based on GCC 3.3 and GCC 3.4 on 32-bit x86 on Linux and macOS<sup id="cite_ref-48" class="reference"><a href="#cite_note-48"><span class="cite-bracket">[</span>48<span class="cite-bracket">]</span></a></sup> was released on 22 March 2004. Since then GDC has gained support for additional platforms, improved performance, and fixed bugs, while tracking upstream DMD code for the frontend and language specification.<sup id="cite_ref-49" class="reference"><a href="#cite_note-49"><span class="cite-bracket">[</span>49<span class="cite-bracket">]</span></a></sup></li>
<li><i>LDC</i> – A compiler based on the DMD front-end that uses <a href="LLVM" title="LLVM">LLVM</a> as its compiler back-end. The first release-quality version was published on 9 January 2009.<sup id="cite_ref-50" class="reference"><a href="#cite_note-50"><span class="cite-bracket">[</span>50<span class="cite-bracket">]</span></a></sup> It supports version 2.0.<sup id="cite_ref-51" class="reference"><a href="#cite_note-51"><span class="cite-bracket">[</span>51<span class="cite-bracket">]</span></a></sup></li></ul>
<p>Toy and proof-of-concept compilers:
</p>
<ul><li><i>D Compiler for <a href=".NET" title=".NET">.NET</a></i> – A back-end for the D programming language 2.0 compiler.<sup id="cite_ref-52" class="reference"><a href="#cite_note-52"><span class="cite-bracket">[</span>52<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-53" class="reference"><a href="#cite_note-53"><span class="cite-bracket">[</span>53<span class="cite-bracket">]</span></a></sup> It compiles the code to <a href="Common_Intermediate_Language" title="Common Intermediate Language">Common Intermediate Language</a> (CIL) bytecode rather than to machine code. The CIL can then be run via a <a href="Common_Language_Infrastructure" title="Common Language Infrastructure">Common Language Infrastructure</a> (CLI) <a href="Virtual_machine" title="Virtual machine">virtual machine</a>. The project has not been updated in years and the author indicated the project is not active anymore.</li>
<li><i>SDC</i> – The <i>Snazzy D Compiler</i><sup id="cite_ref-54" class="reference"><a href="#cite_note-54"><span class="cite-bracket">[</span>54<span class="cite-bracket">]</span></a></sup> uses a custom front-end and <a href="LLVM" title="LLVM">LLVM</a> as its compiler back-end. It is written in D and uses a scheduler to handle symbol resolution in order to elegantly handle the compile-time features of D. This compiler currently supports a limited subset of the language.<sup id="cite_ref-55" class="reference"><a href="#cite_note-55"><span class="cite-bracket">[</span>55<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-56" class="reference"><a href="#cite_note-56"><span class="cite-bracket">[</span>56<span class="cite-bracket">]</span></a></sup></li></ul>
<p>Using above compilers and toolchains, it is possible to compile D programs to target many different architectures, including <a href="IA-32" title="IA-32">IA-32</a>, <a href="Amd64" class="mw-redirect" title="Amd64">amd64</a>, <a href="AArch64" title="AArch64">AArch64</a>, <a href="PowerPC" title="PowerPC">PowerPC</a>, <a href="MIPS64" class="mw-redirect" title="MIPS64">MIPS64</a>, <a href="DEC_Alpha" title="DEC Alpha">DEC Alpha</a>, <a href="M68k" class="mw-redirect" title="M68k">Motorola m68k</a>, <a href="SPARC" title="SPARC">SPARC</a>, <a href="ESA/390" class="mw-redirect" title="ESA/390">s390</a>, <a href="WebAssembly" title="WebAssembly">WebAssembly</a>. The primary supported operating systems are <a href="Windows" class="mw-redirect" title="Windows">Windows</a> and <a href="Linux" title="Linux">Linux</a>, but various compilers also support <a href="Mac_OS_X" class="mw-redirect" title="Mac OS X">Mac OS X</a>, <a href="FreeBSD" title="FreeBSD">FreeBSD</a>, <a href="NetBSD" title="NetBSD">NetBSD</a>, <a href="AIX" class="mw-redirect" title="AIX">AIX</a>, <a href="Solaris_(operating_system)" class="mw-redirect" title="Solaris (operating system)">Solaris/OpenSolaris</a> and <a href="Android_(operating_system)" title="Android (operating system)">Android</a>, either as a host or target, or both. <a href="WebAssembly" title="WebAssembly">WebAssembly</a> target (supported via LDC and LLVM) can operate in any WebAssembly environment, like modern web browser (<a href="Google_Chrome" title="Google Chrome">Google Chrome</a>, <a href="Mozilla_Firefox" class="mw-redirect" title="Mozilla Firefox">Mozilla Firefox</a>, <a href="Microsoft_Edge" title="Microsoft Edge">Microsoft Edge</a>, <a href="Apple_Safari" class="mw-redirect" title="Apple Safari">Apple Safari</a>), or dedicated Wasm virtual machines.
</p>
<div class="mw-heading mw-heading2"><h2 id="Development_tools">Development tools</h2></div>
<p>Editors and <a href="Integrated_development_environment" title="Integrated development environment">integrated development environments</a> (IDEs) supporting <a href="Syntax_highlighting" title="Syntax highlighting">syntax highlighting</a> and partial <a href="Intelligent_code_completion" class="mw-redirect" title="Intelligent code completion">code completion</a> for the language include <a href="SlickEdit" title="SlickEdit">SlickEdit</a>, <a href="Emacs" title="Emacs">Emacs</a>, <a href="Vim_(text_editor)" title="Vim (text editor)">vim</a>, <a href="SciTE" title="SciTE">SciTE</a>, <a href="Smultron" title="Smultron">Smultron</a>, Zeus,<sup id="cite_ref-57" class="reference"><a href="#cite_note-57"><span class="cite-bracket">[</span>57<span class="cite-bracket">]</span></a></sup> and <a href="Geany" title="Geany">Geany</a> among others.<sup id="cite_ref-58" class="reference"><a href="#cite_note-58"><span class="cite-bracket">[</span>58<span class="cite-bracket">]</span></a></sup>
</p>
<ul><li>Dexed (formerly Coedit),<sup id="cite_ref-59" class="reference"><a href="#cite_note-59"><span class="cite-bracket">[</span>59<span class="cite-bracket">]</span></a></sup> a D focused graphical IDE written in <a href="Object_Pascal" title="Object Pascal">Object Pascal</a></li>
<li>Mono-D<sup id="cite_ref-60" class="reference"><a href="#cite_note-60"><span class="cite-bracket">[</span>60<span class="cite-bracket">]</span></a></sup> is a feature rich cross-platform D focused graphical IDE based on <a href="MonoDevelop" title="MonoDevelop">MonoDevelop</a> / Xamarin Studio, mainly written in C Sharp.<sup id="cite_ref-61" class="reference"><a href="#cite_note-61"><span class="cite-bracket">[</span>61<span class="cite-bracket">]</span></a></sup></li>
<li><a href="Eclipse_(software)" title="Eclipse (software)">Eclipse</a> plug-ins for D include DDT<sup id="cite_ref-62" class="reference"><a href="#cite_note-62"><span class="cite-bracket">[</span>62<span class="cite-bracket">]</span></a></sup> and Descent (dead project).<sup id="cite_ref-63" class="reference"><a href="#cite_note-63"><span class="cite-bracket">[</span>63<span class="cite-bracket">]</span></a></sup></li>
<li>Visual Studio integration is provided by VisualD.<sup id="cite_ref-64" class="reference"><a href="#cite_note-64"><span class="cite-bracket">[</span>64<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-65" class="reference"><a href="#cite_note-65"><span class="cite-bracket">[</span>65<span class="cite-bracket">]</span></a></sup></li>
<li><a href="Visual_Studio_Code" title="Visual Studio Code">Visual Studio Code</a> integration with extensions as Dlang-Vscode<sup id="cite_ref-66" class="reference"><a href="#cite_note-66"><span class="cite-bracket">[</span>66<span class="cite-bracket">]</span></a></sup> or Code-D.<sup id="cite_ref-67" class="reference"><a href="#cite_note-67"><span class="cite-bracket">[</span>67<span class="cite-bracket">]</span></a></sup></li>
<li>A bundle is available for <a href="TextMate" title="TextMate">TextMate</a>, and the <a href="Code%3A%3ABlocks" title="Code::Blocks">Code::Blocks</a> IDE includes partial support for the language. However, standard IDE features such as <a href="Code_completion" title="Code completion">code completion</a> or <a href="Refactoring" class="mw-redirect" title="Refactoring">refactoring</a> are not yet available, though they do work partially in Code::Blocks (due to D's similarity to C).</li>
<li>The <a href="Xcode_3" class="mw-redirect" title="Xcode 3">Xcode 3</a> plugin "D for Xcode" enables D-based projects and development.<sup id="cite_ref-68" class="reference"><a href="#cite_note-68"><span class="cite-bracket">[</span>68<span class="cite-bracket">]</span></a></sup></li>
<li><a href="KDevelop" title="KDevelop">KDevelop</a> (as well as its text editor backend, Kate) autocompletion plugin is available.<sup id="cite_ref-69" class="reference"><a href="#cite_note-69"><span class="cite-bracket">[</span>69<span class="cite-bracket">]</span></a></sup></li>
<li>Dlang IDE is a cross-platform IDE written in D using DlangUI library.<sup id="cite_ref-70" class="reference"><a href="#cite_note-70"><span class="cite-bracket">[</span>70<span class="cite-bracket">]</span></a></sup></li></ul>
<p><a href="Open-source_software" title="Open-source software">Open source</a> D IDEs for <a href="Windows" class="mw-redirect" title="Windows">Windows</a> exist, some written in D, such as Poseidon,<sup id="cite_ref-71" class="reference"><a href="#cite_note-71"><span class="cite-bracket">[</span>71<span class="cite-bracket">]</span></a></sup> D-IDE,<sup id="cite_ref-72" class="reference"><a href="#cite_note-72"><span class="cite-bracket">[</span>72<span class="cite-bracket">]</span></a></sup> and Entice Designer.<sup id="cite_ref-73" class="reference"><a href="#cite_note-73"><span class="cite-bracket">[</span>73<span class="cite-bracket">]</span></a></sup>
</p><p>D applications can be debugged using any C/C++ debugger, like <a href="GNU_Debugger" title="GNU Debugger">GNU Debugger</a> (GDB) or <a href="WinDbg" title="WinDbg">WinDbg</a>, although support for various D-specific language features is extremely limited. On Windows, D programs can be debugged using <a rel="nofollow" class="external text" href="https://web.archive.org/web/20070224161328/http://ddbg.mainia.de/">Ddbg</a>, or Microsoft debugging tools (WinDBG and Visual Studio), after having converted the debug information using <a rel="nofollow" class="external text" href="http://dsource.org/projects/cv2pdb">cv2pdb</a>. The <a rel="nofollow" class="external text" href="http://zerobugs.codeplex.com/">ZeroBUGS</a> <a rel="nofollow" class="external text" href="https://web.archive.org/web/20171223130659/http://zerobugs.codeplex.com/">Archived</a> 23 December 2017 at the <a href="Wayback_Machine" title="Wayback Machine">Wayback Machine</a> debugger for Linux has experimental support for the D language. Ddbg can be used with various IDEs or from the command line; ZeroBUGS has its own <a href="Graphical_user_interface" title="Graphical user interface">graphical user interface</a> (GUI).
</p><p><i>DustMite</i> is a tool for minimizing D source code, useful when finding compiler or tests issues.<sup id="cite_ref-74" class="reference"><a href="#cite_note-74"><span class="cite-bracket">[</span>74<span class="cite-bracket">]</span></a></sup>
</p><p><i>dub</i> is a popular package and build manager for D applications and libraries, and is often integrated into IDE support.<sup id="cite_ref-75" class="reference"><a href="#cite_note-75"><span class="cite-bracket">[</span>75<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Examples">Examples</h2></div>

<div class="mw-heading mw-heading2"><h2 id="Uses">Uses</h2></div>
<p>Notable organisations that use the D programming language for projects include <a href="Facebook" title="Facebook">Facebook</a>,<sup id="cite_ref-76" class="reference"><a href="#cite_note-76"><span class="cite-bracket">[</span>76<span class="cite-bracket">]</span></a></sup> <a href="EBay" title="EBay">eBay</a>,<sup id="cite_ref-77" class="reference"><a href="#cite_note-77"><span class="cite-bracket">[</span>77<span class="cite-bracket">]</span></a></sup> and <a href="Netflix" title="Netflix">Netflix</a>.<sup id="cite_ref-78" class="reference"><a href="#cite_note-78"><span class="cite-bracket">[</span>78<span class="cite-bracket">]</span></a></sup>
</p><p>D has been successfully used for <a href="AAA_(video_game_industry)" title="AAA (video game industry)">AAA games</a>,<sup id="cite_ref-79" class="reference"><a href="#cite_note-79"><span class="cite-bracket">[</span>79<span class="cite-bracket">]</span></a></sup> language interpreters, virtual machines,<sup id="cite_ref-80" class="reference"><a href="#cite_note-80"><span class="cite-bracket">[</span>80<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-81" class="reference"><a href="#cite_note-81"><span class="cite-bracket">[</span>81<span class="cite-bracket">]</span></a></sup> an <a href="Operating_system" title="Operating system">operating system</a> <a href="Kernel_(operating_system)" title="Kernel (operating system)">kernel</a>,<sup id="cite_ref-82" class="reference"><a href="#cite_note-82"><span class="cite-bracket">[</span>82<span class="cite-bracket">]</span></a></sup> <a href="Graphics_processing_unit" title="Graphics processing unit">GPU</a> programming,<sup id="cite_ref-83" class="reference"><a href="#cite_note-83"><span class="cite-bracket">[</span>83<span class="cite-bracket">]</span></a></sup> <a href="Web_development" title="Web development">web development</a>,<sup id="cite_ref-84" class="reference"><a href="#cite_note-84"><span class="cite-bracket">[</span>84<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-85" class="reference"><a href="#cite_note-85"><span class="cite-bracket">[</span>85<span class="cite-bracket">]</span></a></sup> <a href="Numerical_analysis" title="Numerical analysis">numerical analysis</a>,<sup id="cite_ref-86" class="reference"><a href="#cite_note-86"><span class="cite-bracket">[</span>86<span class="cite-bracket">]</span></a></sup> <a href="Graphical_user_interface" title="Graphical user interface">GUI applications</a>,<sup id="cite_ref-87" class="reference"><a href="#cite_note-87"><span class="cite-bracket">[</span>87<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-88" class="reference"><a href="#cite_note-88"><span class="cite-bracket">[</span>88<span class="cite-bracket">]</span></a></sup> a <a href="Passenger_information_system" title="Passenger information system">passenger information system</a>,<sup id="cite_ref-89" class="reference"><a href="#cite_note-89"><span class="cite-bracket">[</span>89<span class="cite-bracket">]</span></a></sup> machine learning,<sup id="cite_ref-90" class="reference"><a href="#cite_note-90"><span class="cite-bracket">[</span>90<span class="cite-bracket">]</span></a></sup> text processing, web and application servers and research.
</p><p>The North Korean hacking group <a href="Lazarus_Group" title="Lazarus Group">Lazarus</a> exploited CVE-2021-44228, aka "<a href="Log4Shell" title="Log4Shell">Log4Shell</a>," to deploy three <a href="Malware" title="Malware">malware</a> families written in DLang.<sup id="cite_ref-91" class="reference"><a href="#cite_note-91"><span class="cite-bracket">[</span>91<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Critique">Critique</h2></div>
<p>The lack of transparency, agility and predictability in the process of getting corrections of known flaws and errors incorporated, and the difficulty of introducing minor and major changes to the D language, is eminently described in a blog post article<sup id="cite_ref-92" class="reference"><a href="#cite_note-92"><span class="cite-bracket">[</span>92<span class="cite-bracket">]</span></a></sup> by a former contributor. The apparent frustration described there has led to the <i>OpenD</i> fork<sup id="cite_ref-93" class="reference"><a href="#cite_note-93"><span class="cite-bracket">[</span>93<span class="cite-bracket">]</span></a></sup> on January 1, 2024.
</p>
<div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1266661725">
/* start https://en.wikipedia.org/ */


.mw-parser-output .portalbox{padding:0;margin:0.5em 0;display:table;box-sizing:border-box;max-width:175px;list-style:none}.mw-parser-output .portalborder{border:1px solid var(--border-color-base,#a2a9b1);padding:0.1em;background:var(--background-color-neutral-subtle,#f8f9fa)}.mw-parser-output .portalbox-entry{display:table-row;font-size:85%;line-height:110%;height:1.9em;font-style:italic;font-weight:bold}.mw-parser-output .portalbox-image{display:table-cell;padding:0.2em;vertical-align:middle;text-align:center}.mw-parser-output .portalbox-link{display:table-cell;padding:0.2em 0.2em 0.2em 0.3em;vertical-align:middle}@media(min-width:720px){.mw-parser-output .portalleft{margin:0.5em 1em 0.5em 0}.mw-parser-output .portalright{clear:right;float:right;margin:0.5em 0 0.5em 1em}}


/* end https://en.wikipedia.org/ */
</style>
<ul><li><a href="D_Language_Foundation" title="D Language Foundation">D Language Foundation</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */


.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}


/* end https://en.wikipedia.org/ */
</style><div class="reflist reflist-columns references-column-width" style="column-width: 30em;">
<ol class="references">
<li id="cite_note-D1_changelog1-1"><span class="mw-cite-backlink">^ <a href="#cite_ref-D1_changelog1_1-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-D1_changelog1_1-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */


.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}


/* end https://en.wikipedia.org/ */
</style><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.digitalmars.com/d/1.0/changelog1.html">"D Change Log to Nov 7 2005"</a>. <i>D Programming Language 1.0</i>. Digital Mars<span class="reference-accessdate">. Retrieved <span class="nowrap">1 December</span> 2011</span>.</cite></span>
</li>
<li id="cite_note-wikidata-829582f5a19372246e351f3304a7bec7c68e1165-v20-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-wikidata-829582f5a19372246e351f3304a7bec7c68e1165-v20_2-0">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://dlang.org/changelog/2.111.0.html">"Change Log: 2.111.0"</a>. 1 April 2025.</cite></span>
</li>
<li id="cite_note-D-frontend-license-3"><span class="mw-cite-backlink">^ <a href="#cite_ref-D-frontend-license_3-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-D-frontend-license_3-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-D-frontend-license_3-2"><sup><i><b>c</b></i></sup></a></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://forum.dlang.org/post/lndgp4$hiq$1@digitalmars.com">"dmd front end now switched to Boost license"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">9 September</span> 2014</span>.</cite></span>
</li>
<li id="cite_note-boost-backend-4"><span class="mw-cite-backlink">^ <a href="#cite_ref-boost-backend_4-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-boost-backend_4-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-boost-backend_4-2"><sup><i><b>c</b></i></sup></a></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://forum.dlang.org/post/oc8acc$1ei9$1@digitalmars.com">"dmd Backend converted to Boost License"</a>. 7 April 2017<span class="reference-accessdate">. Retrieved <span class="nowrap">9 April</span> 2017</span>.</cite></span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-5">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://dlang.org/faq.html">"D 2.0 FAQ"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">11 August</span> 2015</span>.</cite></span>
</li>
<li id="cite_note-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-6">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://fileinfo.com/extension/d">"D Programming Language - Fileinfo.com"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">15 November</span> 2020</span>.</cite> </span>
</li>
<li id="cite_note-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-7">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://dlang.org/dmd-windows.html">"D Programming Language - dlang.org"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">15 November</span> 2020</span>.</cite></span>
</li>
<li id="cite_note-8"><span class="mw-cite-backlink"><b><a href="#cite_ref-8">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://news.ycombinator.com/item?id=33846139">"On: Show HN: A nice C string API"</a>. <i><a href="Hacker_News" title="Hacker News">Hacker News</a></i>. 3 December 2022<span class="reference-accessdate">. Retrieved <span class="nowrap">4 December</span> 2022</span>.</cite></span>
</li>
<li id="cite_note-9"><span class="mw-cite-backlink"><b><a href="#cite_ref-9">^</a></b></span> <span class="reference-text"><cite id="CITEREFAlexandrescu2010" class="citation book cs1">Alexandrescu, Andrei (2010). <span class="id-lock-limited" title="Free access subject to limited trial, subscription normally required"><a rel="nofollow" class="external text" href="https://archive.org/details/dprogramminglang00alex"><i>The D programming language</i></a></span> (First&nbsp;ed.). Upper Saddle River, New Jersey: Addison-Wesley. p.&nbsp;<a rel="nofollow" class="external text" href="https://archive.org/details/dprogramminglang00alex/page/n341">314</a>. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>978-0321635365</bdi>.</cite></span>
</li>
<li id="cite_note-Swift_-_Getting_the_location_of_a_caller-10"><span class="mw-cite-backlink"><b><a href="#cite_ref-Swift_-_Getting_the_location_of_a_caller_10-0">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20141006000000/https://developer.apple.com/swift/blog/?id=15">"Building assert() in Swift, Part 2: __FILE__ and __LINE__"</a>. Archived from <a rel="nofollow" class="external text" href="https://developer.apple.com/swift/blog/?id=15">the original</a> on 6 October 2014.</cite></span>
</li>
<li id="cite_note-11"><span class="mw-cite-backlink"><b><a href="#cite_ref-11">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://dlang.org/spec/intro.html">"Introduction - D Programming Language"</a>. <i>dlang.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">21 April</span> 2024</span>.</cite> <span class="noviewer" typeof="mw:File"></span>&nbsp;This article incorporates text from this <a href="Free_content" title="Free content">free content</a> work. Licensed under BSL-1.0 (<a rel="nofollow" class="external text" href="https://github.com/dlang/dlang.org/blob/master/LICENSE.txt">license statement/permission</a>). </span>
</li>
<li id="cite_note-12"><span class="mw-cite-backlink"><b><a href="#cite_ref-12">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://digitalmars.com/d/1.0/cppstrings.html">"D Strings vs C++ Strings"</a>. Digital Mars. 2012.</cite></span>
</li>
<li id="cite_note-13"><span class="mw-cite-backlink"><b><a href="#cite_ref-13">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://digitalmars.com/d/1.0/cppcomplex.html">"D Complex Types and C++ std::complex"</a>. <i><a href="Digital_Mars" title="Digital Mars">Digital Mars</a></i>. 2012. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20080113085617/http://www.digitalmars.com:80/d/1.0/cppcomplex.html">Archived</a> from the original on 13 January 2008<span class="reference-accessdate">. Retrieved <span class="nowrap">4 November</span> 2021</span>.</cite></span>
</li>
<li id="cite_note-short-14"><span class="mw-cite-backlink"><b><a href="#cite_ref-short_14-0">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://dlang.org/expression.html#Lambda">"Expressions"</a>. Digital Mars<span class="reference-accessdate">. Retrieved <span class="nowrap">27 December</span> 2012</span>.</cite></span>
</li>
<li id="cite_note-15"><span class="mw-cite-backlink"><b><a href="#cite_ref-15">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.digitalmars.com/d/1.0/phobos/std_gc.html">"std.gc"</a>. <i>D Programming Language 1.0</i>. Digital Mars<span class="reference-accessdate">. Retrieved <span class="nowrap">6 July</span> 2010</span>.</cite></span>
</li>
<li id="cite_note-16"><span class="mw-cite-backlink"><b><a href="#cite_ref-16">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://dlang.org/memory.html">"Memory Management"</a>. <i>D Programming Language 2.0</i>. Digital Mars<span class="reference-accessdate">. Retrieved <span class="nowrap">17 February</span> 2012</span>.</cite></span>
</li>
<li id="cite_note-dlang.org-17"><span class="mw-cite-backlink">^ <a href="#cite_ref-dlang.org_17-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-dlang.org_17-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://dlang.org/blog/2017/07/07/go-your-own-way-part-one-the-stack/">"Go Your Own Way (Part One: The Stack)"</a>. <i>The D Blog</i>. 7 July 2017<span class="reference-accessdate">. Retrieved <span class="nowrap">7 May</span> 2020</span>.</cite></span>
</li>
<li id="cite_note-18"><span class="mw-cite-backlink"><b><a href="#cite_ref-18">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://dlang.org/spec/attribute.html#scope">"Attributes - D Programming Language"</a>. <i>dlang.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">7 May</span> 2020</span>.</cite></span>
</li>
<li id="cite_note-19"><span class="mw-cite-backlink"><b><a href="#cite_ref-19">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://dlang.org/phobos/std_experimental_allocator.html">"std.experimental.allocator - D Programming Language"</a>. <i>dlang.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">7 May</span> 2020</span>.</cite></span>
</li>
<li id="cite_note-SafeD-20"><span class="mw-cite-backlink"><b><a href="#cite_ref-SafeD_20-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFBartosz_Milewski" class="citation web cs1">Bartosz Milewski. <a rel="nofollow" class="external text" href="http://dlang.org/safed.html">"SafeD – D Programming Language"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">17 July</span> 2014</span>.</cite></span>
</li>
<li id="cite_note-21"><span class="mw-cite-backlink"><b><a href="#cite_ref-21">^</a></b></span> <span class="reference-text"><cite id="CITEREFSteven_Schveighoffer2016" class="citation web cs1">Steven Schveighoffer (28 September 2016). <a rel="nofollow" class="external text" href="https://dlang.org/blog/2016/09/28/how-to-write-trusted-code-in-d/">"How to Write @trusted Code in D"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">4 January</span> 2018</span>.</cite></span>
</li>
<li id="cite_note-22"><span class="mw-cite-backlink"><b><a href="#cite_ref-22">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/dlang/DIPs/blob/master/DIPs/other/DIP1000.md">"Scoped Pointers"</a>. <i><a href="GitHub" title="GitHub">GitHub</a></i>. 3 April 2020.</cite></span>
</li>
<li id="cite_note-23"><span class="mw-cite-backlink"><b><a href="#cite_ref-23">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://wiki.dlang.org/DIP25">"Sealed References"</a>.</cite></span>
</li>
<li id="cite_note-24"><span class="mw-cite-backlink"><b><a href="#cite_ref-24">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://dlang.org/spec/function.html#return-scope-parameters">"D Language Specification: Functions - Return Scope Parameters"</a>.</cite></span>
</li>
<li id="cite_note-25"><span class="mw-cite-backlink"><b><a href="#cite_ref-25">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://dlang.org/blog/2019/07/15/ownership-and-borrowing-in-d/">"Ownership and Borrowing in D"</a>. 15 July 2019.</cite></span>
</li>
<li id="cite_note-26"><span class="mw-cite-backlink"><b><a href="#cite_ref-26">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://dlang.org/spec/function.html#param-storage">"D Language Specification: Functions - Function Parameter Storage Classes"</a>.</cite></span>
</li>
<li id="cite_note-27"><span class="mw-cite-backlink"><b><a href="#cite_ref-27">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/ariovistus/pyd">"PyD"</a>. <i><a href="GitHub" title="GitHub">GitHub</a></i>. 7 May 2020<span class="reference-accessdate">. Retrieved <span class="nowrap">7 May</span> 2020</span>.</cite></span>
</li>
<li id="cite_note-28"><span class="mw-cite-backlink"><b><a href="#cite_ref-28">^</a></b></span> <span class="reference-text"><cite id="CITEREFParker" class="citation web cs1">Parker, Mike. <a rel="nofollow" class="external text" href="https://code.dlang.org/packages/derelict-lua">"Package derelict-lua on DUB"</a>. <i>DUB Package Registry</i><span class="reference-accessdate">. Retrieved <span class="nowrap">7 May</span> 2020</span>.</cite></span>
</li>
<li id="cite_note-29"><span class="mw-cite-backlink"><b><a href="#cite_ref-29">^</a></b></span> <span class="reference-text"><cite id="CITEREFParker" class="citation web cs1">Parker, Mike. <a rel="nofollow" class="external text" href="https://code.dlang.org/packages/bindbc-lua">"Package bindbc-lua on DUB"</a>. <i>DUB Package Registry</i><span class="reference-accessdate">. Retrieved <span class="nowrap">7 May</span> 2020</span>.</cite></span>
</li>
<li id="cite_note-:0-30"><span class="mw-cite-backlink"><b><a href="#cite_ref-:0_30-0">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://dlang.org/spec/betterc.html">"Better C"</a>.</cite></span>
</li>
<li id="cite_note-D1_changelog2-31"><span class="mw-cite-backlink"><b><a href="#cite_ref-D1_changelog2_31-0">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.digitalmars.com/d/1.0/changelog2.html">"D Change Log"</a>. <i>D Programming Language 1.0</i>. Digital Mars<span class="reference-accessdate">. Retrieved <span class="nowrap">11 January</span> 2012</span>.</cite></span>
</li>
<li id="cite_note-32"><span class="mw-cite-backlink"><b><a href="#cite_ref-32">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.digitalmars.com/d/1.0/">"Intro"</a>. <i>D Programming Language 1.0</i>. Digital Mars<span class="reference-accessdate">. Retrieved <span class="nowrap">1 December</span> 2011</span>.</cite></span>
</li>
<li id="cite_note-33"><span class="mw-cite-backlink"><b><a href="#cite_ref-33">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://forum.dlang.org/post/en9ou4$23hr$1@digitaldaemon.com">"Announcing a new library"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">15 February</span> 2012</span>.</cite></span>
</li>
<li id="cite_note-34"><span class="mw-cite-backlink"><b><a href="#cite_ref-34">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.prowiki.org/wiki4d/wiki.cgi?StandardLib">"Wiki4D: Standard Lib"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">6 July</span> 2010</span>.</cite></span>
</li>
<li id="cite_note-D2_changelog-35"><span class="mw-cite-backlink"><b><a href="#cite_ref-D2_changelog_35-0">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://dlang.org/changelog/">"Change Log – D Programming Language"</a>. <i>D Programming Language 2.0</i>. D Language Foundation<span class="reference-accessdate">. Retrieved <span class="nowrap">22 November</span> 2020</span>.</cite></span>
</li>
<li id="cite_note-36"><span class="mw-cite-backlink"><b><a href="#cite_ref-36">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://forum.dlang.org/post/jgagrl$1ta5$1@digitalmars.com">"Tango for D2: All user modules ported"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">16 February</span> 2012</span>.</cite></span>
</li>
<li id="cite_note-37"><span class="mw-cite-backlink"><b><a href="#cite_ref-37">^</a></b></span> <span class="reference-text"><cite id="CITEREFWalter_Bright" class="citation web cs1">Walter Bright. <a rel="nofollow" class="external text" href="http://forum.dlang.org/post/iv524m$98r$1@digitalmars.com">"Re: GitHub or dsource?"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">15 February</span> 2012</span>.</cite></span>
</li>
<li id="cite_note-38"><span class="mw-cite-backlink"><b><a href="#cite_ref-38">^</a></b></span> <span class="reference-text"><cite id="CITEREFAndrei_Alexandrescu" class="citation web cs1">Andrei Alexandrescu. <a rel="nofollow" class="external text" href="http://forum.dlang.org/post/jc0ic5$18bv$2@digitalmars.com">"D1 to be discontinued on December 31, 2012"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">31 January</span> 2014</span>.</cite></span>
</li>
<li id="cite_note-D1_changelog-39"><span class="mw-cite-backlink"><b><a href="#cite_ref-D1_changelog_39-0">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.digitalmars.com/d/1.0/changelog.html">"D Change Log"</a>. <i>D Programming Language 1.0</i>. Digital Mars<span class="reference-accessdate">. Retrieved <span class="nowrap">31 January</span> 2014</span>.</cite></span>
</li>
<li id="cite_note-D-backend-license-40"><span class="mw-cite-backlink"><b><a href="#cite_ref-D-backend-license_40-0">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://archive.today/20161022202138/https://github.com/dlang/dmd/blob/master/src/backendlicense.txt">"backendlicense.txt"</a>. <i>DMD source code</i>. GitHub. Archived from <a rel="nofollow" class="external text" href="https://github.com/dlang/dmd/blob/master/src/backendlicense.txt">the original</a> on 22 October 2016<span class="reference-accessdate">. Retrieved <span class="nowrap">5 March</span> 2012</span>.</cite></span>
</li>
<li id="cite_note-41"><span class="mw-cite-backlink"><b><a href="#cite_ref-41">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.reddit.com/r/programming/comments/82cgp/new_release_of_the_d_programming_language_now/c082539">"Reddit comment by Walter Bright"</a>. 5 March 2009<span class="reference-accessdate">. Retrieved <span class="nowrap">9 September</span> 2014</span>.</cite></span>
</li>
<li id="cite_note-42"><span class="mw-cite-backlink"><b><a href="#cite_ref-42">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.linux-magazin.de/NEWS/D-Compiler-unter-freier-Lizenz">D-Compiler-unter-freier-Lizenz</a> on linux-magazin.de (2017, in German)</span>
</li>
<li id="cite_note-43"><span class="mw-cite-backlink"><b><a href="#cite_ref-43">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://github.com/dlang/dmd/pull/6680">switch backend to Boost License #6680</a> from Walter Bright on <a href="Github.com" class="mw-redirect" title="Github.com">github.com</a></span>
</li>
<li id="cite_note-44"><span class="mw-cite-backlink"><b><a href="#cite_ref-44">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://gcc.gnu.org/ml/gcc/2017-06/msg00111.html">D Language accepted for inclusion in GCC</a></span>
</li>
<li id="cite_note-bright20200526-45"><span class="mw-cite-backlink"><b><a href="#cite_ref-bright20200526_45-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFBright2020" class="citation web cs1">Bright, Walter (26 May 2020). <a rel="nofollow" class="external text" href="https://news.ycombinator.com/item?id=23307367">"Re: Duff's device"</a>. <i>Hacker News</i><span class="reference-accessdate">. Retrieved <span class="nowrap">6 April</span> 2025</span>.</cite></span>
</li>
<li id="cite_note-46"><span class="mw-cite-backlink"><b><a href="#cite_ref-46">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://gdcproject.org/">"GDC"</a>.</cite></span>
</li>
<li id="cite_note-47"><span class="mw-cite-backlink"><b><a href="#cite_ref-47">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://gcc.gnu.org/gcc-9/changes.html#d">"GCC 9 Release Series — Changes, New Features, and Fixes - GNU Project - Free Software Foundation (FSF)"</a>. <i>gcc.gnu.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">7 May</span> 2020</span>.</cite></span>
</li>
<li id="cite_note-48"><span class="mw-cite-backlink"><b><a href="#cite_ref-48">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://forum.dlang.org/post/c3mnst$2htg$1@digitaldaemon.com">"Another front end for GCC"</a>. <i>forum.dlang.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">7 May</span> 2020</span>.</cite></span>
</li>
<li id="cite_note-49"><span class="mw-cite-backlink"><b><a href="#cite_ref-49">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://gcc.gnu.org/gcc-9/changes.html">"GCC 9 Release Series Changes, New Features, and Fixes"</a>.</cite></span>
</li>
<li id="cite_note-50"><span class="mw-cite-backlink"><b><a href="#cite_ref-50">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/ldc-developers/ldc">"LLVM D compiler project on GitHub"</a>. <i><a href="GitHub" title="GitHub">GitHub</a></i><span class="reference-accessdate">. Retrieved <span class="nowrap">19 August</span> 2016</span>.</cite></span>
</li>
<li id="cite_note-51"><span class="mw-cite-backlink"><b><a href="#cite_ref-51">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.dsource.org/projects/ldc/wiki/BuildInstructionsPhobosDruntimeTrunk">"BuildInstructionsPhobosDruntimeTrunk – ldc – D Programming Language – Trac"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">11 August</span> 2015</span>.</cite></span>
</li>
<li id="cite_note-52"><span class="mw-cite-backlink"><b><a href="#cite_ref-52">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20180126042332/http://dnet.codeplex.com/">"D .NET project on CodePlex"</a>. Archived from <a rel="nofollow" class="external text" href="http://dnet.codeplex.com/">the original</a> on 26 January 2018<span class="reference-accessdate">. Retrieved <span class="nowrap">3 July</span> 2010</span>.</cite></span>
</li>
<li id="cite_note-53"><span class="mw-cite-backlink"><b><a href="#cite_ref-53">^</a></b></span> <span class="reference-text"><cite id="CITEREFJonathan_Allen2009" class="citation web cs1">Jonathan Allen (15 May 2009). <a rel="nofollow" class="external text" href="http://www.infoq.com/news/2009/05/D-Source">"Source for the D.NET Compiler is Now Available"</a>. InfoQ<span class="reference-accessdate">. Retrieved <span class="nowrap">6 July</span> 2010</span>.</cite></span>
</li>
<li id="cite_note-54"><span class="mw-cite-backlink"><b><a href="#cite_ref-54">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/snazzy-d/sdc/commit/7933fa47a865bd4b18c6327613c8407127d4e091">"Make SDC the Snazzy D compiler"</a>. <i><a href="GitHub" title="GitHub">GitHub</a></i><span class="reference-accessdate">. Retrieved <span class="nowrap">24 September</span> 2023</span>.</cite></span>
</li>
<li id="cite_note-55"><span class="mw-cite-backlink"><b><a href="#cite_ref-55">^</a></b></span> <span class="reference-text"><cite class="citation audio-visual cs1"><a rel="nofollow" class="external text" href="https://www.youtube.com/watch?v=AhR4PSExnqk"><i>DConf 2014: SDC, a D Compiler as a Library by Amaury Sechet</i></a>. <i><a href="YouTube" title="YouTube">YouTube</a></i><span class="reference-accessdate">. Retrieved <span class="nowrap">8 January</span> 2014</span>.</cite> Archived at <a rel="nofollow" class="external text" href="https://ghostarchive.org/varchive/youtube/20211211/AhR4PSExnqk">Ghostarchive</a> and the <a rel="nofollow" class="external text" href="https://web.archive.org/web/20150326150804/https://www.youtube.com/watch?v=AhR4PSExnqk">Wayback Machine</a></span>
</li>
<li id="cite_note-56"><span class="mw-cite-backlink"><b><a href="#cite_ref-56">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/deadalnix/SDC">"deadalnix/SDC"</a>. <i><a href="GitHub" title="GitHub">GitHub</a></i><span class="reference-accessdate">. Retrieved <span class="nowrap">8 January</span> 2014</span>.</cite></span>
</li>
<li id="cite_note-57"><span class="mw-cite-backlink"><b><a href="#cite_ref-57">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.prowiki.org/wiki4d/wiki.cgi?EditorSupport/ZeusForWindows">"Wiki4D: EditorSupport/ZeusForWindows"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">11 August</span> 2015</span>.</cite></span>
</li>
<li id="cite_note-58"><span class="mw-cite-backlink"><b><a href="#cite_ref-58">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.prowiki.org/wiki4d/wiki.cgi?EditorSupport">"Wiki4D: Editor Support"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">3 July</span> 2010</span>.</cite></span>
</li>
<li id="cite_note-59"><span class="mw-cite-backlink"><b><a href="#cite_ref-59">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://gitlab.com/basile.b/dexed">"Basile.B / dexed"</a>. <i>GitLab</i><span class="reference-accessdate">. Retrieved <span class="nowrap">29 April</span> 2020</span>.</cite></span>
</li>
<li id="cite_note-60"><span class="mw-cite-backlink"><b><a href="#cite_ref-60">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://wiki.dlang.org/Mono-D">"Mono-D - D Wiki"</a>. <i>wiki.dlang.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">30 April</span> 2020</span>.</cite></span>
</li>
<li id="cite_note-61"><span class="mw-cite-backlink"><b><a href="#cite_ref-61">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20120201034822/http://mono-d.sourceforge.net/">"Mono-D – D Support for MonoDevelop"</a>. Archived from <a rel="nofollow" class="external text" href="https://mono-d.sourceforge.net/">the original</a> on 1 February 2012<span class="reference-accessdate">. Retrieved <span class="nowrap">11 August</span> 2015</span>.</cite></span>
</li>
<li id="cite_note-62"><span class="mw-cite-backlink"><b><a href="#cite_ref-62">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://code.google.com/p/ddt/">"Google Project Hosting"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">11 August</span> 2015</span>.</cite></span>
</li>
<li id="cite_note-63"><span class="mw-cite-backlink"><b><a href="#cite_ref-63">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://dsource.org/projects/descent">"descent"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">11 August</span> 2015</span>.</cite></span>
</li>
<li id="cite_note-64"><span class="mw-cite-backlink"><b><a href="#cite_ref-64">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://rainers.github.io/visuald/visuald/StartPage.html">"Visual D - D Programming Language"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">11 August</span> 2015</span>.</cite></span>
</li>
<li id="cite_note-65"><span class="mw-cite-backlink"><b><a href="#cite_ref-65">^</a></b></span> <span class="reference-text"><cite id="CITEREFSchuetze2020" class="citation web cs1">Schuetze, Rainer (17 April 2020). <a rel="nofollow" class="external text" href="https://github.com/rainers/visuald">"rainers/visuald: Visual D - Visual Studio extension for the D programming language"</a>. <i>github.com</i><span class="reference-accessdate">. Retrieved <span class="nowrap">30 April</span> 2020</span>.</cite></span>
</li>
<li id="cite_note-66"><span class="mw-cite-backlink"><b><a href="#cite_ref-66">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/dlang-vscode/dlang-vscode">"dlang-vscode"</a>. <i><a href="GitHub" title="GitHub">GitHub</a></i><span class="reference-accessdate">. Retrieved <span class="nowrap">21 December</span> 2016</span>.</cite></span>
</li>
<li id="cite_note-67"><span class="mw-cite-backlink"><b><a href="#cite_ref-67">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/Pure-D/code-d">"code-d"</a>. <i><a href="GitHub" title="GitHub">GitHub</a></i><span class="reference-accessdate">. Retrieved <span class="nowrap">21 December</span> 2016</span>.</cite></span>
</li>
<li id="cite_note-68"><span class="mw-cite-backlink"><b><a href="#cite_ref-68">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://michelf.com/projects/d-for-xcode/">"Michel Fortin – D for Xcode"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">11 August</span> 2015</span>.</cite></span>
</li>
<li id="cite_note-69"><span class="mw-cite-backlink"><b><a href="#cite_ref-69">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/Dav1dde/lumen">"Dav1dde/lumen"</a>. <i>GitHub</i><span class="reference-accessdate">. Retrieved <span class="nowrap">11 August</span> 2015</span>.</cite></span>
</li>
<li id="cite_note-70"><span class="mw-cite-backlink"><b><a href="#cite_ref-70">^</a></b></span> <span class="reference-text"><cite id="CITEREFMichael2016" class="citation web cs1">Michael, Parker (7 October 2016). <a rel="nofollow" class="external text" href="https://dlang.org/blog/2016/10/07/project-highlight-dlangui">"Project Highlight: DlangUI"</a>. <i>The D Blog</i><span class="reference-accessdate">. Retrieved <span class="nowrap">12 September</span> 2024</span>.</cite></span>
</li>
<li id="cite_note-71"><span class="mw-cite-backlink"><b><a href="#cite_ref-71">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://dsource.org/projects/poseidon">"poseidon"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">11 August</span> 2015</span>.</cite></span>
</li>
<li id="cite_note-72"><span class="mw-cite-backlink"><b><a href="#cite_ref-72">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://d-ide.sourceforge.net/">"Mono-D – D Support for MonoDevelop"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">11 August</span> 2015</span>.</cite></span>
</li>
<li id="cite_note-73"><span class="mw-cite-backlink"><b><a href="#cite_ref-73">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.dprogramming.com/entice.php">"Entice Designer – Dprogramming.com – The D programming language"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">11 August</span> 2015</span>.</cite></span>
</li>
<li id="cite_note-74"><span class="mw-cite-backlink"><b><a href="#cite_ref-74">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/CyberShadow/DustMite/wiki">"What is DustMite?"</a>. <i><a href="GitHub" title="GitHub">GitHub</a></i><span class="reference-accessdate">. Retrieved <span class="nowrap">29 April</span> 2020</span>.</cite></span>
</li>
<li id="cite_note-75"><span class="mw-cite-backlink"><b><a href="#cite_ref-75">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/dlang/dub">"dlang/dub: Package and build management system for D"</a>. <i><a href="GitHub" title="GitHub">GitHub</a></i><span class="reference-accessdate">. Retrieved <span class="nowrap">29 April</span> 2020</span>.</cite></span>
</li>
<li id="cite_note-76"><span class="mw-cite-backlink"><b><a href="#cite_ref-76">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://code.facebook.com/posts/476987592402291/under-the-hood-warp-a-fast-c-and-c-preprocessor/">"Under the Hood: warp, a fast C and C++ preprocessor"</a>. 28 March 2014<span class="reference-accessdate">. Retrieved <span class="nowrap">4 January</span> 2018</span>.</cite></span>
</li>
<li id="cite_note-77"><span class="mw-cite-backlink"><b><a href="#cite_ref-77">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://dlang.org/blog/2017/05/24/faster-command-line-tools-in-d/">"Faster Command Line Tools in D"</a>. 24 May 2017<span class="reference-accessdate">. Retrieved <span class="nowrap">4 January</span> 2018</span>.</cite></span>
</li>
<li id="cite_note-78"><span class="mw-cite-backlink"><b><a href="#cite_ref-78">^</a></b></span> <span class="reference-text"><cite id="CITEREFBlog2017" class="citation web cs1">Blog, Netflix Technology (2 August 2017). <a rel="nofollow" class="external text" href="https://medium.com/@NetflixTechBlog/introducing-vectorflow-fe10d7f126b8">"Introducing Vectorflow"</a>. <i>Medium</i><span class="reference-accessdate">. Retrieved <span class="nowrap">4 January</span> 2018</span>.</cite></span>
</li>
<li id="cite_note-79"><span class="mw-cite-backlink"><b><a href="#cite_ref-79">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://dconf.org/2016/talks/watson.html">"Quantum Break: AAA Gaming With Some D Code"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">4 January</span> 2018</span>.</cite></span>
</li>
<li id="cite_note-80"><span class="mw-cite-backlink"><b><a href="#cite_ref-80">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/higgsjs/Higgs">"Higgs JavaScript Virtual Machine"</a>. <i><a href="GitHub" title="GitHub">GitHub</a></i><span class="reference-accessdate">. Retrieved <span class="nowrap">4 January</span> 2018</span>.</cite></span>
</li>
<li id="cite_note-81"><span class="mw-cite-backlink"><b><a href="#cite_ref-81">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/DigitalMars/DMDScript">"A D implementation of the ECMA 262 (Javascript) programming language"</a>. <i><a href="GitHub" title="GitHub">GitHub</a></i><span class="reference-accessdate">. Retrieved <span class="nowrap">4 January</span> 2018</span>.</cite></span>
</li>
<li id="cite_note-82"><span class="mw-cite-backlink"><b><a href="#cite_ref-82">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://dlang.org/blog/2016/06/24/project-highlight-the-powernex-kernel/">"Project Highlight: The PowerNex Kernel"</a>. 24 June 2016<span class="reference-accessdate">. Retrieved <span class="nowrap">4 January</span> 2018</span>.</cite></span>
</li>
<li id="cite_note-83"><span class="mw-cite-backlink"><b><a href="#cite_ref-83">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://dlang.org/blog/2017/10/30/d-compute-running-d-on-the-gpu/">"DCompute: Running D on the GPU"</a>. 30 October 2017<span class="reference-accessdate">. Retrieved <span class="nowrap">4 January</span> 2018</span>.</cite></span>
</li>
<li id="cite_note-84"><span class="mw-cite-backlink"><b><a href="#cite_ref-84">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://vibed.org/">"vibe.d - a high-performance asynchronous I/O, concurrency and web application toolkit written in D"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">4 January</span> 2018</span>.</cite></span>
</li>
<li id="cite_note-85"><span class="mw-cite-backlink"><b><a href="#cite_ref-85">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://dlang.org/blog/2017/11/20/project-highlight-diamond-mvc-framework/">"Project Highlight: Diamond MVC Framework"</a>. 20 November 2017<span class="reference-accessdate">. Retrieved <span class="nowrap">4 January</span> 2018</span>.</cite></span>
</li>
<li id="cite_note-86"><span class="mw-cite-backlink"><b><a href="#cite_ref-86">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://blog.mir.dlang.io/glas/benchmark/openblas/2016/09/23/glas-gemm-benchmark.html">"Numeric age for D: Mir GLAS is faster than OpenBLAS and Eigen"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">4 January</span> 2018</span>.</cite></span>
</li>
<li id="cite_note-87"><span class="mw-cite-backlink"><b><a href="#cite_ref-87">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://dlang.org/blog/2017/08/11/on-tilix-and-d-an-interview-with-gerald-nunn/">"On Tilix and D: An Interview with Gerald Nunn"</a>. 11 August 2017<span class="reference-accessdate">. Retrieved <span class="nowrap">4 January</span> 2018</span>.</cite></span>
</li>
<li id="cite_note-88"><span class="mw-cite-backlink"><b><a href="#cite_ref-88">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://dlang.org/blog/2016/10/07/project-highlight-dlangui/">"Project Highlight: DlangUI"</a>. 7 October 2016<span class="reference-accessdate">. Retrieved <span class="nowrap">4 January</span> 2018</span>.</cite></span>
</li>
<li id="cite_note-89"><span class="mw-cite-backlink"><b><a href="#cite_ref-89">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://dlang.org/blog/2017/07/">"Project Highlight: Funkwerk"</a>. 28 July 2017<span class="reference-accessdate">. Retrieved <span class="nowrap">4 January</span> 2018</span>.</cite></span>
</li>
<li id="cite_note-90"><span class="mw-cite-backlink"><b><a href="#cite_ref-90">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/Netflix/vectorflow">"Netflix/vectorflow"</a>. <i>GitHub.com</i>. Netflix, Inc. 5 May 2020<span class="reference-accessdate">. Retrieved <span class="nowrap">7 May</span> 2020</span>.</cite></span>
</li>
<li id="cite_note-91"><span class="mw-cite-backlink"><b><a href="#cite_ref-91">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.bleepingcomputer.com/news/security/lazarus-hackers-drop-new-rat-malware-using-2-year-old-log4j-bug/">"Lazarus hackers drop new RAT malware using 2-year-old Log4j bug"</a>. 11 December 2023<span class="reference-accessdate">. Retrieved <span class="nowrap">11 December</span> 2023</span>.</cite></span>
</li>
<li id="cite_note-92"><span class="mw-cite-backlink"><b><a href="#cite_ref-92">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://dpldocs.info/this-week-in-arsd/Blog.Posted_2024_01_01.html">"A ship carrying silverware has sailed"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">6 May</span> 2024</span>.</cite></span>
</li>
<li id="cite_note-93"><span class="mw-cite-backlink"><b><a href="#cite_ref-93">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://opendlang.org">"The OpenD Programming Language"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">14 May</span> 2024</span>.</cite></span>
</li>
</ol></div>
<div class="mw-heading mw-heading2"><h2 id="Further_reading">Further reading</h2></div>
<ul><li><cite class="citation book cs1">Alexandrescu, Andrei (4 January 2010). <i>The D Programming Language</i> (1&nbsp;ed.). Addison-Wesley Professional. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>978-0-321-63536-5</bdi>.</cite></li>
<li><cite class="citation web cs1">Alexandrescu, Andrei (15 June 2009). <a rel="nofollow" class="external text" href="http://www.ddj.com/hpc-high-performance-computing/217801225">"The Case for D"</a>. Dr. Dobb's Journal.</cite></li>
<li><cite class="citation web cs1">Bright, Walter (8 April 2014). <a rel="nofollow" class="external text" href="http://www.drdobbs.com/architecture-and-design/how-i-came-to-write-d/240165322">"How I Came to Write D"</a>. Dr. Dobb's Journal.</cite></li>
<li><cite class="citation web cs1">Çehreli, Ali (1 February 2012). <a rel="nofollow" class="external text" href="http://ddili.org/ders/d.en/index.html">"Programming in D"</a>.</cite> (distributed under CC-BY-NC-SA license). This book teaches programming to novices, but covers many advanced D topics as well.</li>
<li><cite class="citation magazine cs1">Metz, Cade (7 July 2014). <a rel="nofollow" class="external text" href="https://www.wired.com/2014/07/d-programming-language/">"The Next Big Programming Language You've Never Heard Of"</a>. <i>Wired</i>.</cite></li>
<li><cite class="citation book cs1">Ruppe, Adam (May 2014). <i>D Cookbook</i> (1&nbsp;ed.). PACKT Publishing. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>978-1-783-28721-5</bdi>.</cite></li></ul>
<div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1290876196">
/* start https://en.wikipedia.org/ */


.mw-parser-output .side-box{margin:4px 0;box-sizing:border-box;border:1px solid #aaa;font-size:88%;line-height:1.25em;background-color:var(--background-color-interactive-subtle,#f8f9fa);display:flow-root}.mw-parser-output .infobox .side-box{font-size:100%}.mw-parser-output .side-box-abovebelow,.mw-parser-output .side-box-text{padding:0.25em 0.9em}.mw-parser-output .side-box-image{padding:2px 0 2px 0.9em;text-align:center}.mw-parser-output .side-box-imageright{padding:2px 0.9em 2px 0;text-align:center}@media(min-width:500px){.mw-parser-output .side-box-flex{display:flex;align-items:center}.mw-parser-output .side-box-text{flex:1;min-width:0}}@media(min-width:720px){.mw-parser-output .side-box{width:238px}.mw-parser-output .side-box-right{clear:right;float:right;margin-left:1em}.mw-parser-output .side-box-left{margin-right:1em}}


/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r1237033735">
/* start https://en.wikipedia.org/ */


@media print{body.ns-0 .mw-parser-output .sistersitebox{display:none!important}}@media screen{html.skin-theme-clientpref-night .mw-parser-output .sistersitebox img[src*="Wiktionary-logo-en-v2.svg"]{background-color:white}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .sistersitebox img[src*="Wiktionary-logo-en-v2.svg"]{background-color:white}}


/* end https://en.wikipedia.org/ */
</style><div class="side-box side-box-right sistersitebox"><style data-mw-deduplicate="TemplateStyles:r1126788409">
/* start https://en.wikipedia.org/ */


.mw-parser-output .plainlist ol,.mw-parser-output .plainlist ul{line-height:inherit;list-style:none;margin:0;padding:0}.mw-parser-output .plainlist ol li,.mw-parser-output .plainlist ul li{margin-bottom:0}


/* end https://en.wikipedia.org/ */
</style>
<div class="side-box-flex">
<div class="side-box-image"><span class="noviewer" typeof="mw:File"></span></div>
<div class="side-box-text plainlist">Wikibooks has a book on the topic of: <i><b><a href="https://en.wikibooks.org/wiki/A_Beginner%27s_Guide_to_D" class="extiw external" title="wikibooks:A Beginner's Guide to D">A Beginner's Guide to D</a></b></i></div></div>
</div>
<div class="side-box side-box-right sistersitebox">
<div class="side-box-flex">
<div class="side-box-image"><span class="noviewer" typeof="mw:File"></span></div>
<div class="side-box-text plainlist">Wikibooks has a book on the topic of: <i><b><a href="https://en.wikibooks.org/wiki/D_Programming" class="extiw external" title="wikibooks:D Programming">D Programming</a></b></i></div></div>
</div>
<ul><li><span class="official-website"><span class="url"><a rel="nofollow" class="external text" href="https://dlang.org">Official website</a></span></span> </li>
<li><a rel="nofollow" class="external text" href="http://www.digitalmars.com">Digital Mars</a></li>
<li><a rel="nofollow" class="external text" href="http://ddili.org/forum">Turkish Forum</a></li>
<li><a rel="nofollow" class="external text" href="https://github.com/dlang">Dlang</a> on <a href="GitHub" title="GitHub">GitHub</a></li></ul>
<div class="navbox-styles"><style data-mw-deduplicate="TemplateStyles:r1236075235">
/* start https://en.wikipedia.org/ */


.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}body.skin--responsive .mw-parser-output .navbox-image img{max-width:none!important}@media print{body.ns-0 .mw-parser-output .navbox{display:none!important}}


/* end https://en.wikipedia.org/ */
</style></div><div role="navigation" class="navbox" aria-labelledby="C_programming_language527" style="padding:3px"><table class="nowraplinks hlist mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><style data-mw-deduplicate="TemplateStyles:r1239400231">
/* start https://en.wikipedia.org/ */


.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}html.skin-theme-clientpref-night .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}}@media print{.mw-parser-output .navbar{display:none!important}}


/* end https://en.wikipedia.org/ */
</style><div id="C_programming_language527" style="font-size:114%;margin:0 4em"><a href="C_(programming_language)" title="C (programming language)">C programming language</a></div></th></tr><tr><td class="navbox-abovebelow" colspan="2"><div>
<ul><li><a href="ANSI_C" title="ANSI C">ANSI C</a></li>
<li><a href="C99" title="C99">C99</a></li>
<li><a href="C11_(C_standard_revision)" title="C11 (C standard revision)">C11</a></li>
<li><a href="C17_(C_standard_revision)" title="C17 (C standard revision)">C17</a></li>
<li><a href="C23_(C_standard_revision)" title="C23 (C standard revision)">C23</a></li>
<li><a href="Embedded_C" title="Embedded C">Embedded C</a></li>
<li><a href="MISRA_C" title="MISRA C">MISRA C</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Features</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Subroutine" class="mw-redirect" title="Subroutine">Functions</a></li>
<li><a href="Include_directive#C" title="Include directive">Header files</a></li>
<li><a href="Operators_in_C_and_C%2B%2B" title="Operators in C and C++">Operators</a></li>
<li><a href="C_string_handling" title="C string handling">String</a></li>
<li><a href="C_syntax" title="C syntax">Syntax</a></li>
<li><a href="C_preprocessor" title="C preprocessor">Preprocessor</a></li>
<li><a href="C_data_types" title="C data types">Data types</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="C_standard_library" title="C standard library">Standard library</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><td colspan="2" class="navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="C_character_classification" title="C character classification">Char</a></li>
<li><a href="C_file_input/output" title="C file input/output">File I/O</a></li>
<li><a href="C_mathematical_functions" title="C mathematical functions">Math</a></li>
<li><a href="C_dynamic_memory_allocation" title="C dynamic memory allocation">Dynamic memory</a></li>
<li><a href="C_string_handling" title="C string handling">String</a></li>
<li><a href="C_date_and_time_functions" title="C date and time functions">Time</a></li>
<li><a href="Stdarg.h" title="Stdarg.h">Variadic</a></li>
<li><a href="C_POSIX_library" title="C POSIX library">POSIX</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Implementations</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Bionic_(software)" title="Bionic (software)">Bionic</a>
<ul><li><a href="Hybris_(software)" class="mw-redirect" title="Hybris (software)">libhybris</a></li></ul></li>
<li><a href="Dietlibc" title="Dietlibc">dietlibc</a></li>
<li><a href="Glibc" title="Glibc">glibc</a>
<ul><li><a href="Embedded_GLIBC" class="mw-redirect" title="Embedded GLIBC">EGLIBC</a></li></ul></li>
<li><a href="Klibc" title="Klibc">klibc</a></li>
<li><a href="Microsoft_Windows_library_files" title="Microsoft Windows library files">Windows CRT</a></li>
<li><a href="Musl" title="Musl">musl</a></li>
<li><a href="Newlib" title="Newlib">Newlib</a></li>
<li><a href="UClibc" title="UClibc">uClibc</a></li></ul>
</div></td></tr></tbody></table><div></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="List_of_C_compilers" class="mw-redirect" title="List of C compilers">Compilers</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Amsterdam_Compiler_Kit" title="Amsterdam Compiler Kit">ACK</a></li>
<li><a href="Borland_Turbo_C" class="mw-redirect" title="Borland Turbo C">Borland Turbo C</a></li>
<li><a href="Clang" title="Clang">Clang</a></li>
<li><a href="GNU_Compiler_Collection" title="GNU Compiler Collection">GCC</a></li>
<li><a href="Intel_C%2B%2B_Compiler" title="Intel C++ Compiler">ICC</a></li>
<li><a href="LCC_(compiler)" title="LCC (compiler)">LCC</a></li>
<li><a href="Norcroft_C_compiler" title="Norcroft C compiler">Norcroft C</a></li>
<li><a href="Portable_C_Compiler" title="Portable C Compiler">PCC</a></li>
<li><a href="Small_Device_C_Compiler" title="Small Device C Compiler">SDCC</a></li>
<li><a href="Tiny_C_Compiler" title="Tiny C Compiler">TCC</a></li>
<li><a href="Microsoft_Visual_C%2B%2B" title="Microsoft Visual C++">Visual C++ (MSVC)</a></li>
<li><a href="Watcom_C/C%2B%2B" title="Watcom C/C++">Watcom C/C++</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Integrated_development_environment" title="Integrated development environment">IDEs</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Anjuta" title="Anjuta">Anjuta</a></li>
<li><a href="CLion" class="mw-redirect" title="CLion">CLion</a></li>
<li><a href="Code%3A%3ABlocks" title="Code::Blocks">Code::Blocks</a></li>
<li><a href="CodeLite" title="CodeLite">CodeLite</a></li>
<li><a href="Eclipse_(software)" title="Eclipse (software)">Eclipse</a></li>
<li><a href="Geany" title="Geany">Geany</a></li>
<li><a href="GNOME_Builder" title="GNOME Builder">GNOME Builder</a></li>
<li><a href="KDevelop" title="KDevelop">KDevelop</a></li>
<li><a href="NetBeans" title="NetBeans">NetBeans</a></li>
<li><a href="Visual_Studio" title="Visual Studio">Visual Studio</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Comparison with<br>other languages</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Compatibility_of_C_and_C%2B%2B" title="Compatibility of C and C++">Compatibility of C and C++</a></li>
<li><a href="Comparison_of_Pascal_and_C" title="Comparison of Pascal and C">Comparison with Pascal</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Descendant<br>languages</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Alef_(programming_language)" title="Alef (programming language)">Alef</a></li>
<li><a href="C%2B%2B" title="C++">C++</a></li>
<li><a href="C_Sharp_(programming_language)" title="C Sharp (programming language)">C#</a></li>

<li><a href="Objective-C" title="Objective-C">Objective-C</a></li>
<li><a href="Go_(programming_language)" title="Go (programming language)">Go</a></li>
<li><a href="Vala_(programming_language)" title="Vala (programming language)">Vala</a></li>
<li><a href="Zig_(programming_language)" title="Zig (programming language)">Zig</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Designer</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Dennis_Ritchie" title="Dennis Ritchie">Dennis Ritchie</a></li></ul>
</div></td></tr><tr><td class="navbox-abovebelow" colspan="2"><div>
<ul><li><span class="noviewer" typeof="mw:File"><span title="Category"></span></span> <b>Category</b></li></ul>
</div></td></tr></tbody></table></div>
<div class="navbox-styles"></div><div role="navigation" class="navbox authority-control" aria-label="Navbox582" style="padding:3px"><table class="nowraplinks hlist navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="row" class="navbox-group" style="width:1%">Authority control databases: National </th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"><ul><li><span class="uid"><a rel="nofollow" class="external text" href="https://d-nb.info/gnd/7606805-5">Germany</a></span></li><li><span class="uid"><a rel="nofollow" class="external text" href="https://id.loc.gov/authorities/sh2010005564">United States</a></span></li><li><span class="uid"><a rel="nofollow" class="external text" href="https://www.nli.org.il/en/authorities/987007599969505171">Israel</a></span></li></ul></div></td></tr></tbody></table></div></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-08-04" href="https://en.wikipedia.org/wiki/?title=D_(programming_language)&amp;oldid=1304232304">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>

</body></html>